2017-04-13 232 views
-4

該代碼有一個我找不到的錯誤。與您的代碼python語法錯誤無效語法

def cut_rod(p, n): 
    if (n == 0): 
     return 0 
    q = p[n]; 
    for i in range(1,n): 
     q = max(q, p[i] + cut_rod(p, n - i)); 
     return q; 
    return; 

# your code goes here 
p1 = [1, 5, 8, 9, 10, 17, 17, 20, 24, 30]; 
n1 = len(p1); 
print n1; 
a = cut_rod(p1,n1); 
+4

你怎麼知道有一個錯誤?發佈錯誤追溯將幫助人們幫助你! –

+0

Python使用從零開始的索引。這意味着列表中的第一個項目在索引0處,而不是1.當您使用'n1 = len(p1)'時,該索引處的項目實際上恰好在列表結束之後:不存在。你應該使用'n1 = len(p1) - 1'。 – zondo

+0

嗨,zondo,我是Python新手。錯誤說「RuntimeError:超過最大遞歸深度」。感謝回覆。 – yx131

回答

0

的一個問題是,通過定義索引n1不會在你的列表中存在。 Python列表索引從0開始,所以長度爲3的列表只有索引0-2。

mylist = ["a", "b", "c"] 
print(len(mylist)) 
# 3 
print(mylist[3]) 
# IndexError! 
print(mylist[2]) 
# "c" 

取而代之的是:

n1 = len(p1) 

試試這個:

n1 = len(p1) - 1 
+0

非常感謝。我會試試這個。 – yx131

+0

我希望它有幫助。一般來說,您在問題中包含的信息越多越好。 Stackoverflow在[如何編寫好問題]上有相當詳細的指導(https://stackoverflow.com/help/how-to-ask)。 –