2016-07-12 11 views
0

誰も最初の動作しない理由を説明してもらえますか?最初に関数または値を返す:再帰的なpython関数

、関数は最終的な調整値を算出し、...

# returns None 
def _pareRotation(degs): 
    if degs > 360:   
     _pareRotation(degs - 360) 
    else: 
     print "returning %s" % degs 
     return degs 

...しかしNoneを返します。しかし

print _pareRotation(540) 
>> returning 180 
>> None 

、我々は物事を少しとリターンを反転場合機能...

# returns expected results 
def _pareRotation(degs): 
    if degs < 360:   
     print "returning %s" % degs  
     return degs 
    else: 
     return _pareRotation(degs - 360) 

...それが期待どおりに動作:

print _pareRotation(540) 
>> returning 180 
>> 180 

ほとんどの場合、Noneが再帰的ループから排出される原因は何ですか?

答えて

4

あなたが最初のケースでを返すじゃない:

def _pareRotation(degs): 
    if degs > 360:   
     _pareRotation(degs - 360) 
# ^
+1

まだ標準化されていない場合は、標準的な質問があります。この種類の再帰の失敗は、少なくともこのタグでは5回発生します。 –

+0

良い悲しみがあり、そこにあります。ありがとうございました。私は@ Two-BitAlchemistに同意しますが、質問に微妙な違いがあるかもしれません。私は、目標変数 - 「final_degs」と言うことにしよう - という意味で、再帰関数になるという考え方に悩まされました。私が 'final_degs = _pareRotation(540)'を実行し、 'final_degs'を表示または使用すると、私は実際にはいくつかの変換(intから関数)を経た変数を使用しています。それはそれについての正確な考え方ですか? – ghukill

0

うん、あなたは最初のケースには戻っていない、とも私はそれがint型のため、%dをされるべきだと思います。