递归函数返回None而非预期值4的原因咨询
递归函数返回None而非预期值4的原因咨询
我来帮你捋清楚这个问题哈,你的代码里有个关键的小疏漏,导致最终print(x)输出None而不是预期的4,咱们一步步拆解:
问题根源:递归调用未传递返回值
你的helper函数在处理偶数或奇数分支时,只发起了递归调用,但没有把递归调用的结果return出去。拿nos(8)的执行流程举例:
- 启动
helper(8, 0),8是偶数,c变为1,调用helper(4, 1)——但这一步没有return这个调用结果 - 进入
helper(4, 1),4是偶数,c变为2,调用helper(2, 2)——同样没return - 进入
helper(2, 2),2是偶数,c变为3,调用helper(1, 3)——还是没return - 进入
helper(1, 3),1是奇数,c变为4,调用helper(0, 4)——依然没return - 到
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
相关产品推荐
相关产品推荐

