2016-12-15 144 views
1

我不明白這兩個函數之間的差異,爲什麼返回函數的工作,但另一個不工作?困惑在遞歸函數

該函數返回x和y的最大公約數假設X> Y

非工作職能:

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返回每個功能一些東西。實際上,你可以在python中的每個函數的末尾放置一個return None語句,而不會改變這些函數的工作方式。所以,你的第一個功能可以寫

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

所以,當我打電話gcd(28, 14)我得到None。當你return遞歸調用gcd,代碼相當於

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

所以我們要麼返回0或任何gcd(y, z)是,但從來沒有None,因爲代碼永遠不會那麼遠。