2017-04-13 236 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)。 –