请求详解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为例,完整执行流程
我们一步步模拟整个调用和返回的过程:
第一步:逐层拆解(递归调用阶段)
- 调用
sum_of_digit(12345):12345≥10,计算5 + sum_of_digit(1234),暂停当前计算,先处理sum_of_digit(1234) - 调用
sum_of_digit(1234):1234≥10,计算4 + sum_of_digit(123),暂停,处理sum_of_digit(123) - 调用
sum_of_digit(123):123≥10,计算3 + sum_of_digit(12),暂停,处理sum_of_digit(12) - 调用
sum_of_digit(12):12≥10,计算2 + sum_of_digit(1),暂停,处理sum_of_digit(1) - 调用
sum_of_digit(1):1<10,直接返回1,这是第一个确定的结果
第二步:回溯求和(返回结果阶段)
现在开始从最底层的结果往回算:
sum_of_digit(12)拿到返回值1,计算2+1=3,返回3sum_of_digit(123)拿到返回值3,计算3+3=6,返回6sum_of_digit(1234)拿到返回值6,计算4+6=10,返回10sum_of_digit(12345)拿到返回值10,计算5+10=15,返回15
最终result就是15,和程序输出一致。
内容的提问来源于stack exchange,提问作者Harshit Varshney
相关产品推荐
相关产品推荐

