python函数在循环中调用的问题?

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程序,为什么在函数的循环体调用函数无法运行


回答:

因为你这里没有给return:

a = 666

b = 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 % y

while 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=666

b=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

回到顶部