Python 递归函数的困惑

Python 递归函数的困惑,python,recursion,Python,Recursion,我不理解这两个函数之间的区别,为什么返回函数的一个可以工作,而另一个不能 假设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,

我不理解这两个函数之间的区别,为什么返回函数的一个可以工作,而另一个不能

假设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)
工作职能:

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)

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
。当
返回
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
,因为代码永远不会走那么远

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
。当
返回
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
,因为代码永远不会走那么远

如果你不返回第一个函数,你怎么能从中得到一个值呢?两个函数都可以工作,只是第一个函数不返回结果。@PatrickHaugh在读了这篇文章之后,这就更有意义了。谢谢。在第一种情况下,在递归函数调用之前缺少一个
返回<代码>返回
使函数“返回”具有一个值。假设你让我把一系列数字加起来。我可以简单地把它们加起来,把总数留给我自己。。。或者我可以告诉你答案。告诉你答案(还给你)又回来了。把它留给自己(或扔掉)是不会返回的,这就是你在第一个函数中所做的,如果你不返回它,你怎么能期望从第一个函数中得到一个值呢?两个函数都工作,只是第一个函数没有返回结果。@PatrickHaugh在读了这篇文章之后,这就更有意义了。谢谢。在第一种情况下,在递归函数调用之前缺少一个
返回<代码>返回
使函数“返回”具有一个值。假设你让我把一系列数字加起来。我可以简单地把它们加起来,把总数留给我自己。。。或者我可以告诉你答案。告诉你答案(还给你)又回来了。把它留给自己(或扔掉)不会返回,这是您在第一个函数中所做的