玥公子 发表于 2020-6-29 14:58:24

关于用欧几里得求最大公约数的问题

作业答案是:
def gcd(x,y):
    while y:      #问题1:这里不用判断 x 和 y 的大小吗?(不是用大的除以小的吗?为啥判断 y 是 true?)
      t = x % y
      x = y
      y = t
    return x
print(gcd(18,9))

我的方法笨的很:
def gcd(x, y):
    y = max(x, y)#问题2:我测试 比如:gcd(6,9) 的出来的结果是对的,但顺序一旦颠倒 gcd(9 ,6),就报错:超过最大递归深度maximum recursion depth exceeded in comparison---我给的测试数明明都不大,怎么就超出了?是循环写的有问题?
    x = min(x, y)
    while x < y:
      z = b % x
      if z != 0:
            y = x
            x = z
      else:
            return x
print(gcd(x, y))

#问题3:我测试了标准答案gcd(2, 7)gcd(8, 24)gcd(24, 8) 都是对的,我对照着改了好多次自己的都不对,求大神指正其他错误。

Twilight6 发表于 2020-6-29 15:02:47



你的答案什么情况? 没设置递归都会报递归错误....?

而且代码中凭空产生了一个 b ....?


wp231957 发表于 2020-6-29 15:18:54

while y的意思 是while y<>0

wp231957 发表于 2020-6-29 15:20:51

测试两个数 哪个大 可以用交换

不用maxmin 等等

假设 if x>y   继续的话你可以这样
if x<y :x,y=y,x
页: [1]
查看完整版本: 关于用欧几里得求最大公约数的问题