更新:一旦我不知道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 =>
答案 0 :(得分:6)
让我们一步一步地完成这个步骤。
def gcd(a, b):
这定义了一个新函数gcd
,它在计算中使用变量a
和b
。必须在函数开始之前设置这些值。
while b:
除非数字等于0,否则它被认为是真的。因此,如果b
= 0,那么代码的这部分将不会执行。
a, b = b, a%b
为清楚起见,我将把它扩展为两行。
a = b
b = a%b
第一部分是相当自我解释的 - 第二部分绝对不是。 a%b
是a (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)