【发布时间】:2013-12-17 12:08:17
【问题描述】:
我刚刚开始学习 erlang,尾递归正在慢慢杀死我;我无法理解它。我正在尝试制作一个将列表中所有其他数字翻倍的程序,并且我正在尝试使用尾递归来做到这一点。
这是我目前的代码
stripAndDoubleOdds([H|T]) -> stripAndDoubleOdds([H|T],1,[H|T]).
stripAndDoubleOdds(F, _, []) -> F;
stripAndDoubleOdds(_,Index,[H1|T1]) ->
F = [] ++ 2*lists:nth(Index, [H1|T1]),
stripAndDoubleOdds(F, Index +2, T1).
当我给它一个数字列表时,我根本没有输出,但如果我给它一个数字,它可以毫无问题地翻倍。
Index 是为了保持当前元素的位置,它会增加 2,这样我就可以每隔一个整数得到一个整数并将它加倍。我当前的解决方案包括提取头部,将其加倍,将其添加到列表中,然后一遍又一遍地将尾部传递给该过程,直到我得到一个空列表,此时我应该得到我的列表 F 回来。例如如果我输入 [1,2,3,4,5] 我只希望它给我一个列表 [2,6,,10]。
【问题讨论】:
标签: recursion erlang tail-recursion erlang-shell