level 11
输出杨辉三角:接口为start(N),N为行数。
-module(triangle).
-export([start/1]).
start(N) ->
L=getN(N), %% 获取第杨辉三角第N行元素列表
if
N =:= 1 ->
%% N=1,直接输出第一行,递归调用结束
output(L);
N =/= 1 -> %% N>1,递归调用start,先输出第N-1行
start(N-1),
output(L)
end.
%% 控制输出第N行,列表L保存第N行元素,杨辉三角第N行有N个元素
output(L) -> output(L,1).
output(L,No) ->
if
length(L) =:= No ->
io:format("~p~n",[lists:nth(length(L), L)]);
length(L) =/= No ->
io:format("~p,",[lists:nth(No,L)]),
output(L,No+1)
end.
getN(N) ->
if
N =:= 1 ->
[1];
N =:= 2 ->
[1,1];
N > 2
->
L = getN(N-1), %%获得第N-1行元素
process(L) %% 通过第N-1行元素,推导出第N行
end.
process(Ele) -> process(Ele,1,[]).
process(Ele,No,L) ->
Len = length(Ele)+1,
if
Len =:= No ->
Temp = [1|L],
lists:reverse(Temp);
Len =/= No ->
if
No =:=1 ->
process(Ele,No+1,[No | L]);
No =/=1 ->
E1 = lists:nth(No-1,Ele),
E2 = lists:nth(No,Ele),
process(Ele,No+1,[E1+E2 | L])
end
end.
2013年05月21日 01点05分


