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

快乐数检测Python函数返回None问题排查(以19为例)

为什么我的快乐数递归函数返回None?

你遇到的问题很典型——递归调用时没有返回递归函数的结果,导致除了直接得到sum=1的情况外,其他所有递归分支都会默认返回None。

我们来拆解一下你的代码执行流程(以输入19为例):

  1. happy(19)计算得到sum=82,不等于1,于是调用happy(82),但这里没有写return happy(82)
  2. happy(82)计算sum=68,同样调用happy(68),也没返回结果
  3. happy(68)计算sum=100,调用happy(100),还是没返回
  4. happy(100)计算sum=1,返回True,但这个True没有被传递回上一层的happy(68),更别说最外层的happy(19)了
  5. 最外层的happy(19)执行完else分支后,没有任何return语句,Python函数默认返回None

修正后的递归代码

只需要在else分支里加上return,把递归调用的结果逐层返回回去就行:

def happy(n):
    s = list(str(n))
    sum = 0
    for i in s:
        sum += int(i)**2
    if sum == 1:
        return True
    else:
        # 关键:返回递归调用的结果
        return happy(sum)

if __name__=="__main__":
    n = int(input())
    result = happy(n)
    print(result)
    print("True" if result else "False")

另外优化了一个小细节:把happy(n)的结果存到变量里,避免重复调用函数做相同计算。

额外提示:避免无限递归

如果输入的是非快乐数(比如2),你的递归会无限进行下去,因为会进入循环。可以用哈希集合检测重复的sum值,提前判断循环:

def happy(n):
    seen = set()
    while n != 1 and n not in seen:
        seen.add(n)
        sum_sq = 0
        for digit in str(n):
            sum_sq += int(digit)**2
        n = sum_sq
    return n == 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 13:57:42