2017-04-24 6 views
0

Pythonコード再帰エラー

def find(*num): 
    i =0 
    if num[i] != None: 
     print(num[i]) 
     return find(i+1) 

結果

RecursionError: maximum recursion depth exceeded in comparison 

私はインデックスの終わりにどのように停止することができますか?

+1

あなたのコードは何を想定していますか?リストで検索しますか?期待される入力出力を投稿してください –

+0

ようこそ!あなたの質問を改善するためにこの[how-to-ask](http://stackoverflow.com/help/how-to-ask)をお読みください。 – thewaywewere

答えて

0

あなたのリストが50要素以上であるたびに関数はRecursionErrorをスローします。なぜなら、これはPythonのデフォルトの再帰深度であるからです。また、リスト終了条件を設定していないため、リストが50要素より短い場合はIndexErrorがスローされます。あなたは、リスト内のすべての数値の要素を印刷したい場合は は、あなたが単一のループ使用することができますあなたは絶対に再帰ソリューションを望んでいた場合

def find (*num): 
    for entry in num: 
     if entry is not None: 
      print (entry) 

を、あなたは再帰の深さを変更し、使用RESOURSE、終了条件を追加する必要があります。

import resource, sys 
//be wary, your memory usage could went waaay up 
resource.setrlimit(resource.RLIMIT_STACK, (2**29,-1)) 
sys.setrecursionlimit(10**6) 

def find (*num): 
    if len(num)==0: 
     return None 
    current, tail = num[0], num[1:] 
    if current is not None: 
     print (current) 
    find (tail) 
+0

Thx !!!!!ご親切に!!! –

0

関数に渡された最後の(定位置の)引数の値を表示しようとしているようです。

これは動作するはずです:あなたがエラーで終わる

def find(*num): 
    print(num[-1]) 
0

あなたは「再帰終了」条件を設定していなかったので。基本的に何を追加する必要がするようなものです:

def find(*nums): 
    if <your condition>: 
     return 

    ... logic ... 

私は非常にあなたが達成しようとしているのかを理解していないので、そこにあるべき、まさに言い難いです。