没有循环的帕斯卡三角形?
Posted
技术标签:
【中文标题】没有循环的帕斯卡三角形?【英文标题】:Pascal Triangle in without loops? 【发布时间】:2021-12-24 06:17:45 【问题描述】:我正在尝试在不使用列表等导入函数的情况下实现第一行为 0 的 Pascal 三角形。虽然我认为用 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】:这里的一个问题是您的函数不返回任何值。在 Erlang 中,函数隐式返回最后一个表达式的值,但在 Python 中,您需要显式使用 return
语句。
类似:
def calc (x, y):
if (x == 0 & (y == 0 | y == x)):
result = 1
else:
result = calc(x-1, y) + calc(x-1, y-1)
print(result)
return result
对于pascal
函数:
def pascal(n):
row = 0
col = 0
return pascal1(n, row, col)
等等。
【讨论】:
以上是关于没有循环的帕斯卡三角形?的主要内容,如果未能解决你的问题,请参考以下文章