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

阅读 1.8k
2 个回答

因为你这里没有给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 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题