如何使用Erlang中的递归函数以这种方式生成偶数。
注意:输出列表的长度是函数func
示例:
> mod:func(5).
[2,4,6,8,10]
答案 0 :(得分:5)
在erlang中有很多方法可以做到这一点,我建议:
使用序列生成器
doubles(Number)->
lists:seq(2,Number*2,2).
列表推导
doubles(Number)->
[X*2 || X <- lists:seq(1,Number)].
递归方式
doubles(Max)->
doubles(1,Max).
doubles(Max,Max)->
[Max*2];
doubles(Val,Max)->
[Val*2]++doubles2(Val+1,Max).
答案 1 :(得分:1)
这是一个示例模块:
-module(even_numbers).
-export([get_first_n/1]).
get_first_n(Count) ->
get_first_n(Count, 2).
get_first_n(1, Current) ->
[Current];
get_first_n(Count, Current) ->
[Current] ++ f(Count - 1, Current + 2).
答案 2 :(得分:1)
有一种简单而自然的Erlangish方式:
func(N) when is_integer(N) ->
func(2, N).
func(X, N) when N > 0 ->
[X | func(X+2, N-1)];
func(_, _) -> [].
答案 3 :(得分:1)
对我来说,尾递归的方式是更自然的Erlang方式:
func(N) when is_integer(N) andalso (N >= 0) ->
func(N, 1, []).
func(0, _, Acc) ->
lists:reverse(Acc);
func(N, I, Acc) ->
func(N - 1, I + 1, [I*2|Acc]).