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

请求详解Python递归实现数字各位求和的函数运行机制

详解Python递归求数字各位和的运行机制

先看你给出的代码:

# Recursive Python3 program to
# find sum of digits of a number
# Function to check sum of
# digit using recursion

def sum_of_digit( n ):
    if n < 10:
        return n
    return (n % 10 + sum_of_digit(n // 10))    # how this is working ?


num = 12345
result = sum_of_digit(num)
print("Sum of digits in",num,"is", result)

核心逻辑拆解

递归的本质是把大问题拆成小问题,直到遇到终止条件,再回溯计算结果,这个函数的运行可以分成两部分理解:

1. 终止条件

当输入的n小于10时,直接返回n。这很好理解:单个数字的各位和就是它自己,这是递归的“终点”,不会再继续调用自己。

2. 递归拆解语句

return (n % 10 + sum_of_digit(n // 10))这句话里藏了两个关键操作:

  • n % 10:取当前数字的最后一位(比如12345%10=5)
  • n // 10:把数字去掉最后一位(12345//10=1234),然后把这个新数字传入函数本身,继续拆解

以num=12345为例,完整执行流程

我们一步步模拟整个调用和返回的过程:

第一步:逐层拆解(递归调用阶段)

  1. 调用sum_of_digit(12345):12345≥10,计算 5 + sum_of_digit(1234),暂停当前计算,先处理sum_of_digit(1234)
  2. 调用sum_of_digit(1234):1234≥10,计算 4 + sum_of_digit(123),暂停,处理sum_of_digit(123)
  3. 调用sum_of_digit(123):123≥10,计算 3 + sum_of_digit(12),暂停,处理sum_of_digit(12)
  4. 调用sum_of_digit(12):12≥10,计算 2 + sum_of_digit(1),暂停,处理sum_of_digit(1)
  5. 调用sum_of_digit(1):1<10,直接返回1,这是第一个确定的结果

第二步:回溯求和(返回结果阶段)

现在开始从最底层的结果往回算:

  • sum_of_digit(12)拿到返回值1,计算2+1=3,返回3
  • sum_of_digit(123)拿到返回值3,计算3+3=6,返回6
  • sum_of_digit(1234)拿到返回值6,计算4+6=10,返回10
  • sum_of_digit(12345)拿到返回值10,计算5+10=15,返回15

最终result就是15,和程序输出一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:30:58