a=666
b=1414
def gcd(x,y):
x,y=y,x%y
while(x%y>0):
gcd(x,y)
else:
return y
print(gcd(666,1414))
这是一个求最大公约数的python程序,为什么在函数的循环体调用函数无法运行
a=666
b=1414
def gcd(x,y):
x,y=y,x%y
while(x%y>0):
gcd(x,y)
else:
return y
print(gcd(666,1414))
这是一个求最大公约数的python程序,为什么在函数的循环体调用函数无法运行
这么写不就好了,递归本来就是循环了,没有必要在套while
a=666
b=1414
def gcd(a, b):
if b == 0:
return a
else:
return gcd(b, a % b)
print(gcd(666,1414))
本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
10 回答11.1k 阅读
15 回答8.3k 阅读
7 回答5.2k 阅读
6 回答6.9k 阅读✓ 已解决
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3k 阅读✓ 已解决
因为你这里没有给return:
没有return的时候,你的代码一直在
这三行来回死循环,当循环到
x
是82,y
是10的时候,进入while
循环,进入gcd(x, y)
中,然后经过x, y = y, x % y
的交换和计算,x
此时为10,y
此时为2,按理说此时应该走到了else
分支,你有return y
,但是这个return只是退出你上次进入gcd
这次递归函数,而你并没在调用递归的地方再次return,这就导致了一直在while那里死循环。