Python递归调用

时间:2018-07-21 13:19:30

标签: python recursion

我想运行此代码,但出现此错误: 如果n == 0: RecursionError:比较中超过了最大递归深度

    def gcd(n, m):
    if n == 0:
        return m
    else:
        return gcd(n, m % n)


print(gcd(10, 50))

任何人都知道为什么吗?

2 个答案:

答案 0 :(得分:0)

第二次返回时,您实际上是在说n = nm = m % n用于下一次迭代。您正在有效地更改m的值,但从未更改n的值,因此它永远不会变为0。您的函数永远不会达到n = 0的退出条件。

答案 1 :(得分:-1)

要计算GCD,您需要考虑两个数字。通过仅检查n的终止条件并仅更改m,就可以在所有递归中无限期地保持n相同,而不会达到终止条件。

您应该使用两个数字中较小的一个作为除数,并在下一次递归中将其余的数字传递给另一个数字。

def gcd(n, m):
    if n == 0:
        return m
    if m == 0:
        return n
    if n > m:
        return gcd(n % m, m)
    return gcd(n, m % n)

print(gcd(10, 50))