没有循环的帕斯卡三角形?

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)

等等。

【讨论】:

以上是关于没有循环的帕斯卡三角形?的主要内容,如果未能解决你的问题,请参考以下文章

经典算法-帕斯卡三角形(杨辉三角形)

leetcode-帕斯卡三角形

ruby 帕斯卡的三角形

如何有效地计算帕斯卡三角形中的一行?

C ++:如何产生帕斯卡三角形的第'n'行? [关闭]

python3练习-杨辉三角/帕斯卡三角形