2017-04-13 14 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はゼロベースのインデックスを使用します。つまり、リストの最初の項目は1ではなく、インデックス0にあります。 'n1 = len(p1)'を使用すると、その項目の項目は実際にはリストの最後の直後です:存在しません。 'n1 = len(p1) - 1'を使うべきです。 – zondo

+0

こんにちは、私は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)に関するかなり詳細なガイドラインがあります。 –