gpt4 book ai didi

list - 在 Elixir 中使用递归反转列表

转载 作者:行者123 更新时间:2023-12-05 01:25:33 25 4
gpt4 key购买 nike

我的任务是获取一个列表,然后使用一个参数递归地反转它。我得到的是这个解决方案:

def reverse(l) do
[head | tail] = l
cond do

tail == [] ->
head

true ->
[reverse(tail) , head]

end
end

我尝试过 |而不是 true 语句中的逗号,但无济于事。这个解决方案的问题在于它在输入 [1,2,3,4,5] 时打印出以下内容:

[[[[5, 4], 3], 2], 1]

除了返回列表的最终值时,它实际上并没有头部部分添加到列表中。 (在本例中为 5)

最佳答案

不能像在 [reverse(tail), head] 中那样对 [list, elem] 进行隐式扁平化。

前者是一个列表,这就是您收到嵌套列表的原因。

解决该问题的一种方法是使用 reverse(tail)++ [head] 将一个列表添加到另一个列表。虽然它效率不高,因为它会在每个步骤中生成新列表并且不是尾递归的。

正确的解决方案是引入一个累加器来收集处理过的项目

def reverse(input, acc \\ [])
def reverse([], acc), do: acc
def reverse([head | tail], acc) do
reverse(tail, [head | acc])
end

reverse([1, 2, 3])
#⇒ [3, 2, 1]

关于list - 在 Elixir 中使用递归反转列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70784667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com