<p>我又回到了数学、算法和数据结构。今天,我花时间研究欧几里德算法和最大公约数</p>
<p>下面,我实现了一个函数来演示我学到的知识:</p>
<pre><code>from math import floor
def euclidian(a: int, b: int):
# a = b * q + r
_q: int = int(floor(a / b))
print(f"Quotient: {_q}")
r: int = a % b
print(f"Remainder: {r}")
a = b
print(f"A = B({a})")
b = r
print(f"B = R({b})")
if a != 0 and b != 0:
euclidian(a, b)
# a = 0; gcd(0, b) = b
elif a == 0:
print(f"Returning value a({b}) | type: {type(b)}")
return b
# b = 0; gcd(a, 0) = a
elif b == 0:
print(f"Returning value a({a}) | type: {type(a)}")
return a
a: int = 270
b: int = 192
gcd: int = euclidian(a, b)
print(f"GCD type: {type(gcd)}")
print(f"GCD({a}, {b}) = {gcd}")
</code></pre>
<p>此递归函数经过几次迭代,最终返回以下结果:</p>
<pre><code>Quotient: 6
Remainder: 0
A = B(6)
B = R(0)
Returning value a(6) | type: <class 'int'>
GCD type: <class 'NoneType'>
GCD(270, 192) = None
</code></pre>
<p>天越来越晚了,也许我需要一杯茶来唤醒自己。但是我似乎无法理解为什么变量<code>gcd</code>是<code>None</code>,而不是<code>a</code>的整数值。我错过了什么</p>
<p>谢谢</p>