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

Python递归函数为何返回None?递归计数问题咨询

递归函数返回None的原因及解决方法

你遇到的问题核心是递归分支未返回递归调用的结果,导致最外层函数调用默认返回None。

问题分析

看你的代码逻辑:

  • 当n > 0时,你执行count(n)进行递归,但这个分支没有任何return语句。
  • 递归到最底层(n <= 0)时,函数会返回j,但上层的递归调用没有把这个返回值传递回去。
  • 举个例子:输入123时,递归流程是count(123) → count(12) → count(1),count(1)返回3,但count(12)调用count(1)后没返回结果,所以count(12)返回None;同理count(123)也返回None,最终j拿到的就是None。

修正方案

在n > 0的分支里,添加return把递归调用的结果逐层传递回来:

i = 1
input_number = int(input("Input a digit you wish to count: "))


def count(n):
    global i
    n = int(n/10)
    if n > 0:
        i = i+1
        return count(n)  # 新增return,传递递归结果
    else:
        j = i
        print(f"j={j}")
        return j


j = count(input_number)
print(f"i={i}")
print(j)

更优写法(避免全局变量)

全局变量在递归中容易引发问题(比如多次调用函数时,i不会自动重置),推荐用递归本身的返回值计数,逻辑更清晰:

input_number = int(input("Input a digit you wish to count: "))

def count(n):
    if n < 10:
        return 1
    return 1 + count(n // 10)

result = count(input_number)
print(result)

这个写法里,每个递归调用返回「当前位(1)加上剩余数字的位数」,最终直接得到总位数,无需依赖全局变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:40:46