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]