微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么递归不能以正确的值结束?

如何解决为什么递归不能以正确的值结束?

我正在尝试编写代码来递归计算两个数字(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调用find_gcd时,它将与使用类似实现的调用find_gcd2相同。 >

就像您使用print一样,您实际上需要使用返回的值,否则find_gcd中的递归调用就是无效代码。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。