我正在麻省理工学院6.00学习Python并堆叠制作递归代码。 我唯一想做的就是迭代从x扣除1,但不知道该做什么..
这是我的代码
def gcdIter(a, b):
'''
a, b: positive integers
returns: a positive integer, the greatest common divisor of a & b.
'''
# Your code here
x = min(a, b)
if max(a, b) % min(a, b) == 0:
return x
else:
return #What comes to iterate -1 from x
请帮助!!!
答案 0 :(得分:6)
您的代码过于复杂,请尝试从wikipedia改编的递归实现:
def gcd(a, b):
if b == 0:
return a
else:
return gcd(b, a % b)
您似乎在寻找迭代解决方案(这个问题具有误导性)。如果是这种情况,这里有几个可能的实现,也改编自维基百科:
def gcd(a, b):
while b:
a, b = b, a % b
return a
def gcd(a, b):
while a != b:
if a > b:
a -= b
else:
b -= a
return a
答案 1 :(得分:0)
一个简单的解决方案是这样的
def gcd(a, b):
#find the gcd of a,b,None if not found
miner = min(a, b)
gcd = None
for i in xrange(1, miner+1):
if(a % i == 0 and b % i == 0):
gcd = i
return gcd
现在如果> b,你可以从谷歌获得这个 gcd(a,b)= gcd(a%b,b) 你可以用一个while循环来提高函数的性能,你可以尝试一下
答案 2 :(得分:0)
你们真棒!感谢所有的答案。 结果我需要使用-1的While循环,直到min(a,b)到达gcd。
虽然您的答案看起来更简单,但问题集的答案在
之下def gcdIter(a, b):
'''
a, b: positive integers
returns: a positive integer, the greatest common divisor of a & b.
'''
x = min(a, b)
# Keep looping until testValue divides both a & b evenly
while a % x != 0 or b % x != 0:
x -= 1
return x
再次感谢所有人!!!