【发布时间】:2022-01-12 06:09:21
【问题描述】:
我是 python 新手,我尝试使用欧几里安算法创建一个 GCD 函数。但是每当我尝试打印答案时,它都不会返回。可能有人让我知道我做错了什么。
代码:
def gcd(a,b):
if a - b != 0:
b = b - a
b = abs(b)
if a > b:
a,b = b, a
return gcd(a,b)
else:
gcd(a,b)
else:
print(a)
x = input("Give First Num... ")
y = input("Give Second Num... ")
answer = gcd(int(x), int(y))
print("GCD = {}".format(answer))
控制台:
120
GCD = None
【问题讨论】:
-
这段代码的任何部分实际上都没有
returns 是最大的公分母。 -
函数中唯一返回的地方是第一个递归调用,所以最终它只会返回
None。考虑一个简单的例子,a = b = 1。代码进入顶层else,打印a(即1),然后隐式返回None。将print(a)更改为return a以修复它。然后查看第二个递归调用gcd(a,b)。这会调用自身,丢弃结果,并再次隐式返回None。将gcd(a,b)更改为return gcd(a,b)。