【问题标题】: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 和一堆错误

【问题讨论】:

    标签: python functional-programming erlang


    【解决方案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)
    

    等等。

    【讨论】:

      猜你喜欢
      • 2012-10-24
      • 1970-01-01
      • 1970-01-01
      • 2014-11-12
      • 2015-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多