鱼C论坛

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

[已解决]求大佬帮忙解读一下代码

[复制链接]
发表于 2020-9-17 09:31:46 | 显示全部楼层 |阅读模式

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

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

x

def gcd (m, n):
    while n:
        m,n = n,m%n
    return m


>>> gcd(20,45)
5
>>> gcd(7,9)
1


帮忙解读一下,菜鸟看的有点懵
最佳答案
2020-9-17 10:06:34
def gcd (m, n):
    while n:
        m,n = n,m%n
    return m

慢慢看,拿纸记一下
用例子一解读一下:
>>> gcd(20,45)
首先传入参数20,和45,即m = 20 ,n =45
然后进入while n(n=45)循环,进入循环后,执行循环体(m,n = n,m%n),执行循环体后m = 45,n=5
接着n 不为零,继续进入循环(此时m = 45,n=5),执行循环体(m,n = n,m%n),执行循环体后 m =5,n =0;
n为零 结束循环体,进入下一步(return m),返回m 的值5
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-17 09:53:18 | 显示全部楼层
这个需要你理解欧几里德法求最大公约数算法,理解了算法,这代码也就一个while循环,没啥难理解的
若不理解欧几里得法的原理,那就去问数学老师吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-17 10:06:05 | 显示全部楼层
辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求两个正整数之最大公约数的算法。它是已知最古老的算法, 其可追溯至公元前300年前。
它的具体做法是:用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。

(百度搜索原文)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-17 10:06:34 | 显示全部楼层    本楼为最佳答案   
def gcd (m, n):
    while n:
        m,n = n,m%n
    return m

慢慢看,拿纸记一下
用例子一解读一下:
>>> gcd(20,45)
首先传入参数20,和45,即m = 20 ,n =45
然后进入while n(n=45)循环,进入循环后,执行循环体(m,n = n,m%n),执行循环体后m = 45,n=5
接着n 不为零,继续进入循环(此时m = 45,n=5),执行循环体(m,n = n,m%n),执行循环体后 m =5,n =0;
n为零 结束循环体,进入下一步(return m),返回m 的值5
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-17 10:09:57 | 显示全部楼层
while n:当n为True时(等价于n非0时)
m = m % n
n = n  这2个等式都是从右往左看
return m 然后返回m的值,也就是返回m % n的值
     
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-18 16:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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