2017-01-26 6 views
0

かなり愚かな質問の最後に「復帰」が、...ミッシング関数はPython

def gcd(a, b): 
    if a < b: 
     a, b = b, a 
    if a == 0: 
     return b 
    elif b == 0: 
     return a 
    return gcd(b, a % b) 

だから、関数の最後に何returnを、ありませんとき、なぜコードリターンNoneをしませんか?再帰的に呼び出され、aまたはbが最終的に0に等しい場合、それはifの条件を満たしていますか?次に、ゼロ以外の値を返します。

+0

中間ステップは値を返しません。 – Max

+0

この関数は決して 'None'を返すべきではありません。あなたが 'None'を観察するようにした' a'と 'b'の値は何でしたか? – DyZ

+2

@DYZ上記の関数はNoneを返しませんが、彼が最後の返り値を省略すると(最後の行を単純に 'gcd(b、a%b)')_then_は 'None'を返し、なぜ彼は尋ねている。 – Dan

答えて

3

aでもbもゼロでない場合、最初の2つのリターンステートメントのいずれも実行されません。

最終的なリターンがなければ、制御の流れはreturn文を使わずに関数の最後に到達するので、default value of Noneが返されます。