无法理解“def gcd()”的代码

时间:2013-02-21 03:54:51

标签: python python-2.7 greatest-common-divisor

更新:一旦我不知道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 => 

2 个答案:

答案 0 :(得分:6)

让我们一步一步地完成这个步骤。

def gcd(a, b):

这定义了一个新函数gcd,它在计算中使用变量ab。必须在函数开始之前设置这些值。

while b:

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

 a, b = b, a%b

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

a = b
b = a%b

第一部分是相当自我解释的 - 第二部分绝对不是。 a%ba (mod b)的python表达式.Moduulo是数学函数,在最基本的状态下,返回两个数字的余数。例如,12%5 = 2; 12/5的余数为2。

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

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

return a

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

要阅读有关欧几里德方程式的更多信息(并且......因为我加密和数学,'扩展'版本)转到this Wikipedia page.

我希望这有用!

答案 1 :(得分:1)

这是gcd函数的递归版本。

def gcd(a, b):
    c = a%b
    if c == 0:
        return b
    return gcd(b, c)