2016-05-13 230 views
0

我不知道我在做什麼錯我的代碼在這裏得到一個遞歸帕卡爾的三角形在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)) 
+1

你要問關於* *具體問題,而不是隻說「這是我的代碼,它不工作,請調試它給我。」。見[help/on-topic] – SiHa

回答

2

你在循環中做了一些混淆,建立一個新的行。 range(1, last_row[-1])真的沒有道理;你想迭代最後一行的索引,即range(len(last_row))。您也在下一行混合了final_rlast_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)) 
+0

謝謝!你是一個傳奇:D –

1

有一個更好的方法來做到這一點使用的帕斯卡三角通式(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) 
+0

謝謝:)非常感謝 –

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] 
+0

謝謝! :D欣賞它 –