我又回到了数学、算法和数据结构。今天,我花时间研究欧几里德算法和最大公约数
下面,我实现了一个函数来演示我学到的知识:
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}")
此递归函数经过几次迭代,最终返回以下结果:
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
天越来越晚了,也许我需要一杯茶来唤醒自己。但是我似乎无法理解为什么变量gcd
是None
,而不是a
的整数值。我错过了什么
谢谢
当一个函数返回
None
时,通常意味着它在代码结束时没有执行return
语句。在你的例子中,你有一堆if
语句,我猜它们都不适用您正在进行递归调用,但不返回值。i、 e
应该是
你也没有其他人说过的基本情况
相关问题 更多 >
编程相关推荐