W1ND123 发表于 2021-9-20 20:41:25

这个简单的公约数为什么不能跑

欧几里得求公约数

def gcd(x,y):
    while 1:
      t = x % y
      x = y
      y = t
    return x

这个为什么程序报错呢??????


def gcd(x,y):
    while y:
      t = x % y
      x = y
      y = t
    return x

但是1改成y为什么就可以了呢

wp231957 发表于 2021-9-21 09:05:03

W1ND123 发表于 2021-9-21 08:47
当你调用函数,gcd(2,4),这个时候y等于4,不也是数字吗,这样子函数内部就是while 4,为什么能跑呢?
还有 ...

死循环有的会报错,比如栈溢出啥的
而有的时候就不报错,
while后面跟一个数字的情况分俩种
while   0    这种情况就是循环终止了
while   非0   这就是一直循环直至降到0或升到0
       而这个数字如果一直都不改变,那就是死循环

jackz007 发表于 2021-9-20 21:07:24

    while 1 是死循环,而 while y 不是。

W1ND123 发表于 2021-9-21 08:47:34

jackz007 发表于 2021-9-20 21:07
while 1 是死循环,而 while y 不是。

当你调用函数,gcd(2,4),这个时候y等于4,不也是数字吗,这样子函数内部就是while 4,为什么能跑呢?
还有一个问题,死循环程序会报错吗,不是只是一直循环罢了吗
望解答,小白问题多,谢谢!!!!!!

W1ND123 发表于 2021-9-21 09:00:25

jackz007 发表于 2021-9-20 21:07
while 1 是死循环,而 while y 不是。

哦哦,刚刚自己研究了一下,这个程序,我已经明白为什么一定要是y了,谢谢大佬的解答
不过我还有个小问题,就是死循环是没办法跑起来的吗,我记得我用while 死循环打印一个东西,会一直打印到崩溃呀

W1ND123 发表于 2021-9-21 09:58:10

wp231957 发表于 2021-9-21 09:05
死循环有的会报错,比如栈溢出啥的
而有的时候就不报错,
while后面跟一个数字的情况分俩种


明白了,感谢!!!!!!!

晴雨皆宜 发表于 2021-9-21 10:04:46

开卷有益,多多益善·····
页: [1]
查看完整版本: 这个简单的公约数为什么不能跑