无循环实现首行为0的帕斯卡三角:Erlang与Python代码问题排查
帕斯卡三角代码修正方案
Erlang代码修正
问题定位
- 原有代码仅计算帕斯卡三角的数值,未执行打印操作,最终仅输出
io:write("done")的结果:Erlang中字符串本质是ASCII码列表,因此"done"输出为[100,111,110,101] - 每行数值计算完成后未添加换行或空格分隔,无法得到你期望的拼接输出效果
修正后代码
-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代码修正
问题定位
- 逻辑运算符误用:用了位运算符
&/|,应该用逻辑运算符and/or calc函数终止条件缺失:仅判断了x0的情况,未覆盖Y0或X==Y的通用终止场景,同时函数内部直接打印而非返回值,导致递归计算时出现None相加报错- 多余打印:
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
相关产品推荐
相关产品推荐

