鱼C论坛

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

[已解决]欧几里得算法求最大公约数

[复制链接]
发表于 2018-8-16 15:08:43 | 显示全部楼层 |阅读模式

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

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

x
看了小甲鱼的python视频,还是不懂欧几里得算法求最大公约数的思想:欧几里得算法要求x>y时,用x%y,但是课后题的代码中没有关于x,y的大小判断依然可以正确算出最大公约数,请各位大神帮忙解释一下下面的代码,感激不尽!!!

#递归
def gcd(x, y):
    if y:
        return gcd(y, x%y)
    else:
        return x

#非递归
def gcd(x, y):
     
while y:
         
    x, y = y, x%y
     
return x
最佳答案
2018-8-16 15:25:30
看非递归的方法好了,递归的也是一样
while y: 即 y 不为零,将持续循环
y = x%y   # y 是 x 对 y 取 余数。如果 y 要等于零,那必然是找到倍数关系了

其实如果不懂的话,自己展开来看
gcd(42,12)
x,y = 12, 42%12 == 6
x,y = 6, 12%12 == 0
找到啦~~ 42 与 12 的最大公约数为 6
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-8-16 15:25:30 | 显示全部楼层    本楼为最佳答案   
看非递归的方法好了,递归的也是一样
while y: 即 y 不为零,将持续循环
y = x%y   # y 是 x 对 y 取 余数。如果 y 要等于零,那必然是找到倍数关系了

其实如果不懂的话,自己展开来看
gcd(42,12)
x,y = 12, 42%12 == 6
x,y = 6, 12%12 == 0
找到啦~~ 42 与 12 的最大公约数为 6
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-18 09:55:11 | 显示全部楼层
claws0n 发表于 2018-8-16 15:25
看非递归的方法好了,递归的也是一样
while y: 即 y 不为零,将持续循环
y = x%y   # y 是 x 对 y 取 余 ...

谢谢您的解答!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-18 10:23:22 | 显示全部楼层

楼主,往后如果问题得以解决,记得采纳最佳答案哦~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-18 11:14:40 | 显示全部楼层
claws0n 发表于 2018-8-18 10:23
楼主,往后如果问题得以解决,记得采纳最佳答案哦~~

嗯嗯,我再等待别的回答争取理解的更透彻些
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-22 04:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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