You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无循环实现首行为0的帕斯卡三角:Erlang与Python代码问题排查

帕斯卡三角代码修正方案

Erlang代码修正

问题定位

  1. 原有代码仅计算帕斯卡三角的数值,未执行打印操作,最终仅输出io:write("done")的结果:Erlang中字符串本质是ASCII码列表,因此"done"输出为[100,111,110,101]
  2. 每行数值计算完成后未添加换行或空格分隔,无法得到你期望的拼接输出效果

修正后代码

-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) -> 
    pascal1(N, 0, 0).

pascal1(N, Row, _Col) when Row > N ->
    io:format("done~n");
pascal1(N, Row, Col) ->
    pascal2(N, Row, Col),
    io:format(" "), % 行之间加空格分隔
    pascal1(N, Row+1, 0).

pascal2(_N, Row, Col) when Col > Row ->
    ok;
pascal2(N, Row, Col) ->
    Val = calc(Row, Col),
    io:format("~p", [Val]), % 打印当前数值
    pascal2(N, Row, Col+1).

运行效果

执行s:main()会输出1 11 121 1331 done,符合你的预期。


Python代码修正

问题定位

  1. 逻辑运算符误用:用了位运算符&/|,应该用逻辑运算符and/or
  2. calc函数终止条件缺失:仅判断了x0的情况,未覆盖Y0或X==Y的通用终止场景,同时函数内部直接打印而非返回值,导致递归计算时出现None相加报错
  3. 多余打印:pascal函数无返回值,末尾print(pascal(3))会额外输出None

修正后代码

def calc(x, y):
    if y == 0 or x == y:
        return 1
    return calc(x-1, y) + calc(x-1, y-1)

def pascal(n):
    pascal1(n, 0, 0)

def pascal1(n, row, col):
    if row <= n:
        pascal2(n, row, col)
        print(" ", end="") # 行之间加空格
        pascal1(n, row + 1, 0)
    else:
        print("done")

def pascal2(n, row, col):
    if col <= row:
        print(calc(row, col), end="") # 打印数值不换行
        pascal2(n, row, col + 1)

pascal(3)

运行效果

执行代码会输出1 11 121 1331 done,符合需求。


内容的提问来源于stack exchange,提问作者honj - t

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 21:15:09