我想运行此代码,但出现此错误: 如果n == 0: RecursionError:比较中超过了最大递归深度
def gcd(n, m):
if n == 0:
return m
else:
return gcd(n, m % n)
print(gcd(10, 50))
任何人都知道为什么吗?
答案 0 :(得分:0)
第二次返回时,您实际上是在说n = n
和m = 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))