对递归函数感到困惑

时间:2016-12-15 16:51:53

标签: python recursion

我不明白这两个函数之间的区别,为什么返回函数的函数有效但另一个函数没有?

假设x> 1,该函数返回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)

1 个答案:

答案 0 :(得分: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,因为代码永远不会那么远。