1

更新:一旦我不知道3 %4 =0...

def gcd(a, b):
    """Calculate the Greatest Common Divisor of a and b.

    Unless b==0, the result will have the same sign as b (so that when
    b is divided by it, the result comes out positive).
    """
    while b:
        a, b = b, a%b
    return a

我认为它是这样工作的:

gcd(3,4) => while 4: => 3,4 = 4, 3%4 => 
4

2 回答 2

6

让我们一步一步来。

def gcd(a, b):

gcd这定义了一个使用变量a及其b计算的新函数。这些值必须在函数开始之前设置。

while b:

除非一个数等于 0,否则它被认为是真的。所以,如果b= 0,那么这部分代码将不会执行。

 a, b = b, a%b

为了清楚起见,我将把它扩展到两行。

a = b
b = a%b

第一部分是不言自明的——第二部分绝对不是。a%ba (mod b)模数的 Python 表达式,是数学函数,在它们的最基本状态下,返回两个数字的余数。例如,12%5 = 2; 余数12/5为 2。

但是,在编写实际代码时,请确保将它们保持在同一行。“在一行中,分配同时发生(由元组打包和拆包提供)。在两行中,分配一个接一个地发生,这给出了一个不正确的答案(b 将始终为 0)” - Tim

这些行无限重复,直到变量b等于 0。之后,代码执行:

return a

这会将值返回a给程序的其余部分,以便以后可以使用它。它也结束了函数。

要阅读有关欧几里得方程的更多信息(并且......因为我喜欢密码学和数学,“扩展”版)请访问此 Wikipedia 页面。

我希望这会有所帮助!

于 2013-02-21T04:17:28.400 回答
1

这是 gcd 函数的递归版本。

def gcd(a, b):
    c = a%b
    if c == 0:
        return b
    return gcd(b, c)
于 2014-08-26T15:48:37.753 回答