我正在尝试实现一个Pascal三角形,它的第一行是0,而不使用像列表这样的导入函数。虽然我认为这在Python这样的更常见的语言中是相当容易的,但我似乎不能把我如何在Erlang中做到这一点放在我的脑海中。因此,任何关于我如何解决这个问题的帮助都是非常感谢的。
-module(s).
-compile(export_all).
main()->
pascal(3).
calc(X, Y) ->
if
Y == 0 -> 1;
X == Y -> 1;
true -> calc(X-1, Y-1) + calc(X-1, Y)
end.
pascal(N) ->
Row = 0,
Col = 0,
pascal1(N, Row, Col).
pascal1(N, Row, Col) ->
if
Row =< N ->pascal2(N, Row, Col);
true -> io:write("done")
end.
pascal2(N, Row, Col) ->
if
Col =< Row -> calc(Row, Col);
true -> pascal1(N, Row+1, NewCol = 0)
end.
我从中得到的是:[100,111,110,101]
我需要得到的是:1 11 121 1331
我决定在python中重新创建它,这样它也不使用循环。我认为递归是可能的,但我不认为我做得对。
def calc (x, y):
if (x == 0 & (y == 0 | y == x)):
print (1)
else:
print (calc(x-1, y) + calc(x-1, y-1))
def pascal(n):
row = 0
col = 0
pascal1(n, row, col)
def pascal1(n, row, col):
if row <= n:
pascal2(n, row, col)
else:
print("done")
def pascal2(n, row, col):
if col <= row:
calc(row, col)
pascal2(n, row, col + 1)
else:
pascal1(n, row + 1, col = 0)
print(pascal(3))
将结果打印到1 1 1
和一堆错误
1条答案
按热度按时间8cdiaqws1#
这里的一个问题是你的函数不返回任何值,在Erlang中,函数隐式地返回最后一个表达式的值,但在Python中你需要显式地使用
return
语句。类似于:
对于
pascal
函数:如此等等。