为何这段递归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
相关产品推荐
相关产品推荐

