递归帕斯卡的三角形(Python)
我不知道我在做什么错我的代码在这里得到一个递归帕卡尔的三角形在python中工作。任何帮助,恳请赞赏:)递归帕斯卡的三角形(Python)
n = 5
def printPascal(n):
Pascal_List = []
if n == 0:
Pascal_List.append([1])
return Pascal_List
if n == 1:
Pascal_List.append([1])
Pascal_List.append([1,1])
return Pascal_List
else:
new_row = [1]
final_r = printPascal(n - 1)
last_row = final_r[-1]
for k in range(1, last_row[-1]):
new_row.append(final_r[k] + final_r[k - 1])
new_row += last_row
final_r.append(new_row)
return final_r
print(printPascal(n))
你在循环中做了一些混淆,建立一个新的行。 range(1, last_row[-1])
真的没有道理;你想迭代最后一行的索引,即range(len(last_row))
。您也在下一行混合了final_r
和last_row
。
这里是你的代码的修正版本:
n = 5
def printPascal(n):
Pascal_List = []
if n == 0:
Pascal_List.append([1])
return Pascal_List
if n == 1:
Pascal_List.append([1])
Pascal_List.append([1,1])
return Pascal_List
else:
new_row = [1]
final_r = printPascal(n - 1)
last_row = final_r[-1]
for k in range(len(last_row)-1):
new_row.append(last_row[k] + last_row[k + 1])
new_row.append(1)
final_r.append(new_row)
return final_r
print(printPascal(n))
谢谢!你是一个传奇:D –
有一个更好的方法来做到这一点使用的帕斯卡三角通式(N选K),但我不会去说。
看着你的代码,我猜你正试图添加上一行中的前两个数字来获得下一个数字。在else
条件与此
更改替换:
#It should be length instead.
for k in range(1, len(last_row)):
new_row.append(last_row[k] + last_row[k - 1])
#You need to add the 1 at the end
new_row.append(1)
谢谢:)非常感谢 –
@zale已经与您for
循环说明了问题,没必要重复。但是请注意,你可以让你的代码很划算简单:
- 没有必要的
n == 1
案件特殊处理 - 您可以通过补零 最后一行使第二部分简单得多
试试这个:
def printPascal(n):
if n == 0:
return [[1]]
else:
final_r = printPascal(n - 1)
last = [0] + final_r[-1] + [0] # note: this does not modify final_r
new_row = [last[k] + last[k - 1] for k in range(1, len(last))]
return final_r + [new_row]
谢谢! :D欣赏它 –
你要问关于* *具体问题,而不是只说“这是我的代码,它不工作,请调试它给我。”。见[help/on-topic] – SiHa