2016-12-15 105 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,因为代码永远不会那么远。