我试图解决的问题如下:编写一个名为collatz的Erlang函数,该函数有一个参数N。可以假设N是一个大于或等于1的整数。该函数应打印Collatz序列(每行一个数字)。例如,collatz(4)应打印4、2、1(在单独行上)。collatz(6)应打印6、3、10、5、16、8、4、2、1(在单独行上)。
我编写的collatz函数工作正常,但是我在单独的行上打印输出时遇到了困难。下面代码中注解掉的部分是我试图在单独的行上生成输出的尝试。
collatz(1) -> [1];
collatz(N) when N rem 2 == 0 ->
[N|collatz(N div 2)];
%[io:format("Collatz is : ~p~n",[N])N|collatz(N div 2)];
collatz(N) ->
[N|collatz(3*N+1)].
%[io:format("Collatz is : ~p~n",[N])N|colla[N|collatz(N div 2)]tz(3*N+1)].
例如,当我调用collatz(5)时,得到的输出是[5,16,8,4,2,1],我希望这些数字在单独的行中打印出来。
3条答案
按热度按时间j7dteeu81#
考虑在每次迭代之前打印每个元素,而不是运行整个程序并打印结果,如
tct7dpnv2#
您只需要在将
N
添加到列表之前 * 计算io:format/2
...eiee3dmh3#