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

递归函数返回None而非预期值4的原因咨询

递归函数返回None而非预期值4的原因咨询

我来帮你捋清楚这个问题哈,你的代码里有个关键的小疏漏,导致最终print(x)输出None而不是预期的4,咱们一步步拆解:

问题根源:递归调用未传递返回值

你的helper函数在处理偶数或奇数分支时,只发起了递归调用,但没有把递归调用的结果return出去。拿nos(8)的执行流程举例:

  1. 启动helper(8, 0),8是偶数,c变为1,调用helper(4, 1)——但这一步没有return这个调用结果
  2. 进入helper(4, 1),4是偶数,c变为2,调用helper(2, 2)——同样没return
  3. 进入helper(2, 2),2是偶数,c变为3,调用helper(1, 3)——还是没return
  4. 进入helper(1, 3),1是奇数,c变为4,调用helper(0, 4)——依然没return
  5. 到n=0时,函数打印c(也就是4)并return 4,但这个4只能回到上一层helper(1,3),而helper(1,3)没有把这个值return出去,导致上层所有递归调用都会默认返回None。最终helper(8,0)返回None,nos(8)也就返回None,所以print(x)输出None。

修正后的代码

只需要在两个递归调用的位置加上return,让返回值沿着递归链传递上来即可:

def nos(n):
    def helper(n,c):
        if n==0:
            print(c)
            return c
        if n % 2 == 0:
            c += 1
            return helper(n / 2,c)  # 新增return传递递归结果
        else:
            c += 1
            return helper(n - 1,c)  # 新增return传递递归结果
    return helper(n, 0)

x=nos(8)
print(x)

现在运行这段代码,你会先看到print(c)输出的4,随后print(x)也会输出4(如果不需要中间的打印,可以把helper里的print(c)删掉)。

备注:内容来源于stack exchange,提问作者sean

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 15:13:02