Python递归求和函数中print语句的输出逻辑解析求助
递归求和函数执行流程解析
你的核心问题在于:代码里计算完result后,额外调用了一次recursive_sum(num-1)并打印,这导致递归调用次数翻倍,输出的就是这些额外递归调用的返回值。下面一步步拆解recursive_sum(3)的完整执行过程:
执行步骤拆解
- 调用
recursive_sum(3):num≠0,先执行result = 3 + recursive_sum(2),进入recursive_sum(2)的调用。
- 调用
recursive_sum(2):num≠0,执行result = 2 + recursive_sum(1),进入recursive_sum(1)的调用。
- 调用
recursive_sum(1):num≠0,执行result = 1 + recursive_sum(0),进入recursive_sum(0)的调用。
- 调用
recursive_sum(0):- 触发
num==0的条件,直接返回0。
- 触发
- 回到
recursive_sum(1):- 计算
result = 1 + 0 = 1。 - 执行
print(recursive_sum(0), end=" "):再次调用recursive_sum(0),返回0,所以打印0。 - 最终返回
result=1。
- 计算
- 回到
recursive_sum(2):- 计算
result = 2 + 1 = 3。 - 执行
print(recursive_sum(1), end=" "):这里会完整调用一次recursive_sum(1):- 进入
recursive_sum(1),计算result=1+recursive_sum(0)=1,然后执行print(recursive_sum(0), end=" ")打印0,最后返回1。 - 所以这次
print会输出1。
- 进入
- 此时已打印内容:
0 0 1。 - 返回
result=3。
- 计算
- 回到
recursive_sum(3):- 计算
result = 3 + 3 = 6。 - 执行
print(recursive_sum(2), end=" "):这里会完整调用一次recursive_sum(2):- 进入
recursive_sum(2),先调用recursive_sum(1):该调用会打印0并返回1,所以recursive_sum(2)的result=2+1=3。 - 接着
recursive_sum(2)执行print(recursive_sum(1), end=" "):这个recursive_sum(1)调用会打印0并返回1,所以这里打印1。 - 最终
recursive_sum(2)返回3,所以这次print输出3。
- 进入
- 此时总打印内容就是:
0 0 1 0 0 1 3。 - 返回
result=6(这个返回值你没打印,所以看不到)。
- 计算
优化建议:避免重复递归调用
如果想打印递归过程中的中间值,不要重复调用递归函数(会额外消耗性能且逻辑混乱),直接打印已计算的变量即可。比如修改后的代码:
def recursive_sum(num): if num == 0: print(0, end=" ") return 0 result = num + recursive_sum(num - 1) print(num, end=" ") return result
执行recursive_sum(3)会输出0 1 2 3 ,清晰展示递归从底层到上层的执行过程。
内容的提问来源于stack exchange,提问作者akanksha
相关产品推荐
相关产品推荐

