【发布时间】:2021-01-12 06:26:26
【问题描述】:
我正在尝试编写代码来递归计算两个数字(n 和 m)的 GCD。随着递归的进行,我希望我的答案在 gcd_val 中更新。我尝试调试,但不明白为什么它选择较早的 gcd_val 与其子调用(内部递归调用)中获得的值相比。我想知道为什么会发生这种情况以及正确的方法应该是什么?当它应该是 4 时,我得到了答案 2。
def find_gcd(n, m, gcd_val):
factor_list = [2, 3, 5]
if n == 0 or m == 0:
return 0
for f in factor_list:
if n % f == 0 and m % f == 0:
find_gcd(int(n/f), int(m/f), gcd_val)
gcd_val *= f
return gcd_val
print(find_gcd(20, 8, 1))
【问题讨论】:
-
我不知道这是什么语言,但您似乎没有对循环中递归调用返回的值做任何事情。我的意思是你在函数中调用
find_gcd(int(n/f), int(m/f), gcd_val),但它的返回值不是你应用乘法赋值的值。您将乘法赋值 (*=) 应用于最初传递给函数的gcd_val参数。您需要将递归调用返回的值乘以赋值并从函数中返回。
标签: python python-3.x function recursion