Python 最大递归,GCD(最大公约数)
我用python编写了一个程序来查找gcdPython 最大递归,GCD(最大公约数),python,recursion,Python,Recursion,我用python编写了一个程序来查找gcd def gcd(a,b): r=a%b if r==0: return a elif r==1: return 1 else: gcd(a,b)==gcd(b,r) return gcd(b,r) 无论何时调用该函数,它都会显示消息“已超过最大递归”。请帮助 我知道可以使用循环来完成,但我想特别使用递归方法。请容忍我。我是一个学习者 这个语句是不必要的,它
def gcd(a,b):
r=a%b
if r==0:
return a
elif r==1:
return 1
else:
gcd(a,b)==gcd(b,r)
return gcd(b,r)
无论何时调用该函数,它都会显示消息“已超过最大递归”。请帮助
我知道可以使用循环来完成,但我想特别使用递归方法。请容忍我。我是一个学习者 这个语句是不必要的,它使递归无止境:
gcd(a,b)==gcd(b,r)
,因为它一次又一次地调用gcd(a,b)
。只需删除它:
def gcd(a,b):
r=a%b
if r==0:
return a
elif r==1:
return 1
return gcd(b,r)
注意:顺便说一句,您的公式错了,您应该在if子句中返回b
,因为您在计算模时正在除以a/b
def gcd(a,b):
r=a%b
if r==0:
return b
elif r==1:
return 1
return gcd(b,r)
>>>gcd(10,4)
2
这个语句是不必要的,它使递归无止境:
gcd(a,b)==gcd(b,r)
,因为它一次又一次地调用gcd(a,b)
。只需删除它:
def gcd(a,b):
r=a%b
if r==0:
return a
elif r==1:
return 1
return gcd(b,r)
注意:顺便说一句,您的公式错了,您应该在if子句中返回b
,因为您在计算模时正在除以a/b
def gcd(a,b):
r=a%b
if r==0:
return b
elif r==1:
return 1
return gcd(b,r)
>>>gcd(10,4)
2
gcd(a,b)==gcd(b,r)
不会做你期望它做的事
这并不意味着“定义gcd(a,b)等于gcd(b,r)”
相反,gcd(a,b)==gcd(b,r)
表示:
- 计算gcd(a,b)
- 计算gcd(b,r)
- 比较这两个结果,看它们是否相等
gcd(a,b)
以计算gcd(a,b)
,因此您将得到一个无休止的递归
相反,您希望在该点返回gcd(b,r)
。即:
def gcd(a,b):
r=a%b
if r==0:
return a
elif r==1:
return 1
else:
return gcd(b,r)
gcd(a,b)==gcd(b,r)
不会做你期望它做的事
这并不意味着“定义gcd(a,b)等于gcd(b,r)”
相反,gcd(a,b)==gcd(b,r)
表示:
- 计算gcd(a,b)
- 计算gcd(b,r)
- 比较这两个结果,看它们是否相等
gcd(a,b)
以计算gcd(a,b)
,因此您将得到一个无休止的递归
相反,您希望在该点返回gcd(b,r)
。即:
def gcd(a,b):
r=a%b
if r==0:
return a
elif r==1:
return 1
else:
return gcd(b,r)
我就是这样做的
def gcd(m,n):
if m >= n:
r = m % n
if r == 0:
return n
else:
m = n
n = r
return gcd(m,n)
else:
temp = m
m = n
n = temp
return gcd(m,n)
我就是这样做的
def gcd(m,n):
if m >= n:
r = m % n
if r == 0:
return n
else:
m = n
n = r
return gcd(m,n)
else:
temp = m
m = n
n = temp
return gcd(m,n)
如果您试图计算非常大的数字的GCD(例如,在搜索时),您最好完全避免递归,而是使用迭代函数。例如:
def gcd(a,b):
while a:
a,b = b%a,a
return b
如果您试图计算非常大的数字的GCD(例如,在搜索时),您最好完全避免递归,而是使用迭代函数。例如:
def gcd(a,b):
while a:
a,b = b%a,a
return b
你为什么要检查等式?gcd(a,b)==gcd(b,r)应该做什么?除了递归修复,我认为你在公式上有错误,检查我的答案。你为什么要检查等式?gcd(a,b)==gcd(b,r)应该做什么?除了递归修复,我认为你在公式上有错误,请核对我的答案