2016-12-15 17 views
1

私はこれらの2つの関数の違いを理解していません。なぜ関数を返す関数は動作しますが、もう一方は機能しませんか?再帰関数に混乱しています

def gcd(x, y): 
    z = x % y 
    if z == 0: 
     return y 
    else: 
     gcd(y, z) 

ワーキング機能:

def gcd(x, y): 
    z = x % y 
    if z == 0: 
     return y 
    else: 
     return gcd(y, z) 
+5

返さないと、最初の関数から値を得る方法はありますか? –

+2

両方の関数が機能しますが、最初の関数だけが結果を返しません。 – apokryfos

+0

@PatrickHaughこれを読んだら、今これはもっと意味をなさない。ありがとうございました。 –

答えて

4

すべての機能Pythonの戻り値関数は、x> yで

非稼働機能を仮定し、xとyとの間の最大公約数を返し

何か。実際には、return None文をPythonのすべての関数の最後に置くことができます。これらの関数の仕組みについて何も変更することはありません。だからあなたの最初の関数は、私がgcd(28, 14)を呼び出すときだから私はNoneを得る

def gcd(x, y): 
    z = x % y 
    if z == 0: 
     return y 
    else: 
     gcd(y, z) 
    return None 

を書き込むことができます。あなたgcdからreturn再帰呼び出し、コードは、コードがそこまで取得することはありませんので、私たちは、0または何gcd(y, z)あるを返しませんが、決してNoneいずれか

def gcd(x, y): 
    z = x % y 
    if z == 0: 
     return y 
    else: 
     return gcd(y, z) 
    return None 

に相当する場合です。

関連する問題