Recursion 这个模块一直超时?
我不明白这有什么问题。假设您运行Recursion 这个模块一直超时?,recursion,elixir,Recursion,Elixir,我不明白这有什么问题。假设您运行Maps.map([1],[2])。然后它应该执行map(xs,xs1),因为xs=[]和xs1=[]是空的,map([],[])应该返回[],从而结束递归。然后 []++[1+2]=[3]因此结果应该返回[3]。然而,这只是冻结了我的终端 xs和xs1已经是第二个子句中的列表,但是您正在将其包装到另一个列表中,这将创建无限递归。更改: defmodule Maps do def map([],[]) do [] end def map([x|xs], [x1
Maps.map([1],[2])
。然后它应该执行map(xs,xs1)
,因为xs=[]
和xs1=[]
是空的,map([],[])
应该返回[]
,从而结束递归。然后
[]++[1+2]=[3]
因此结果应该返回[3]
。然而,这只是冻结了我的终端 xs
和xs1
已经是第二个子句中的列表,但是您正在将其包装到另一个列表中,这将创建无限递归。更改:
defmodule Maps do
def map([],[]) do [] end
def map([x|xs], [x1 | xs1])
do map([xs],[xs1]) ++ [(x + x1) | []] end
end
致:
给出了预期的输出:
map(xs, xs1) ++ [(x + x1) | []]
旁注:[x |[]]
与[x]
相同,因此您可以将其重写为:
iex(1)> Maps.map([1, 2, 3], [4, 5, 6])
[9, 7, 5]
xs
和xs1
已经是第二个子句中的列表,但是您正在将其包装到另一个列表中,这将创建无限递归。更改:
defmodule Maps do
def map([],[]) do [] end
def map([x|xs], [x1 | xs1])
do map([xs],[xs1]) ++ [(x + x1) | []] end
end
致:
给出了预期的输出:
map(xs, xs1) ++ [(x + x1) | []]
旁注:[x |[]]
与[x]
相同,因此您可以将其重写为:
iex(1)> Maps.map([1, 2, 3], [4, 5, 6])
[9, 7, 5]