erlang 没有循环的Pascal三角形?

0kjbasz6  于 2022-12-08  发布在  Erlang
关注(0)|答案(1)|浏览(170)

我正在尝试实现一个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和一堆错误

8cdiaqws

8cdiaqws1#

这里的一个问题是你的函数不返回任何值,在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)

如此等等。

相关问题