鱼C论坛

 找回密码
 立即注册
查看: 1050|回复: 4

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

[复制链接]
发表于 2020-6-29 14:58:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
作业答案是:
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) 都是对的,我对照着改了好多次自己的都不对,求大神指正其他错误。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-29 15:02:47 | 显示全部楼层


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

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


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-29 15:18:54 | 显示全部楼层
while y  的意思 是  while y<>0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-29 15:20:51 | 显示全部楼层
测试两个数 哪个大 可以用交换

不用max  min 等等

假设 if x>y   继续的话  你可以这样
  if x<y :x,y=y,x
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-20 07:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表