python函数在循环中调用的问题?
a=666b=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程序,为什么在函数的循环体调用函数无法运行
回答:
因为你这里没有给return:
a = 666b = 1414
def gcd(x, y):
x, y = y, x % y
while x % y > 0:
return gcd(x, y) # <- 这里return一下就好了。
else:
return y
print(gcd(666, 1414))
没有return的时候,你的代码一直在
x, y = y, x % ywhile x % y > 0:
gcd(x, y)
这三行来回死循环,当循环到 x
是82,y
是10的时候,进入 while
循环,进入 gcd(x, y)
中,然后经过 x, y = y, x % y
的交换和计算,x
此时为10,y
此时为2,按理说此时应该走到了 else
分支,你有 return y
,但是这个return只是退出你上次进入 gcd
这次递归函数,而你并没在调用递归的地方再次return,这就导致了一直在while那里死循环。
回答:
这么写不就好了,递归本来就是循环了,没有必要在套while
a=666b=1414
def gcd(a, b):
if b == 0:
return a
else:
return gcd(b, a % b)
print(gcd(666,1414))
本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
以上是 python函数在循环中调用的问题? 的全部内容, 来源链接: utcz.com/p/938783.html