You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何这段递归GCD函数无法正常工作?对比两段代码解析

递归GCD函数运行差异的原因解析

先看能正常运行的递归GCD代码:

a, b = map(int, input().split())
def gcd(a,b):
    if a%b == 0:
        return b
    else:
        return gcd(b,a%b)   
print(gcd(a,b))

再看无法得到正确结果的代码:

a, b = map(int, input().split())
def gcd(a,b):
    if a%b == 0:
        return b
    gcd(b,a%b)

print(gcd(a,b))

核心差异:递归调用的返回值传递

第一个函数里,当a%b != 0时,用return gcd(b,a%b)把递归调用的结果传递回上层调用。比如递归到最底层,满足a%b ==0返回b,这个值会一步步往上返回,最终回到最初的gcd(a,b)调用,被print输出。

第二个函数的问题在于,当不满足a%b ==0时,只是执行了gcd(b,a%b),但没有把这个递归调用的结果返回。最底层的递归确实会算出正确的GCD值,但这个值无法传递回上层函数——上层函数执行完递归调用后,没有任何return语句,所以默认返回None。最终print输出的就是None,看起来像是“无法运行”,本质是没有正确传递递归的返回值。

简单说:递归函数里,每一层的调用结果都需要通过return传递回去,否则上层拿不到底层计算出的结果。

内容的提问来源于stack exchange,提问作者Myojoong Kim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 13:45:45