求大佬帮忙解读一下代码
def gcd (m, n):
while n:
m,n = n,m%n
return m
>>> gcd(20,45)
5
>>> gcd(7,9)
1
帮忙解读一下,菜鸟看的有点懵{:5_100:} 这个需要你理解欧几里德法求最大公约数算法,理解了算法,这代码也就一个while循环,没啥难理解的
若不理解欧几里得法的原理,那就去问数学老师吧 辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求两个正整数之最大公约数的算法。它是已知最古老的算法, 其可追溯至公元前300年前。
它的具体做法是:用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。
(百度搜索原文) 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 while n:当n为True时(等价于n非0时)
m = m % n
n = n这2个等式都是从右往左看
return m 然后返回m的值,也就是返回m % n的值
页:
[1]