如何理解带多个if判断的Python递归函数的调用逻辑与计算过程?
Python递归函数fun执行流程详解
先提取本次计算会用到的字典映射,避免反复查表:
dictionary[53] = 3dictionary[58] = 1dictionary[63] = 2dictionary[65] = 2dictionary[66] = 2
该函数为递归实现,执行时会从上到下依次匹配if分支,满足条件直接返回,不匹配则判断下一个分支,最后一个分支会触发新的递归调用,完整执行流程如下:
1. 初始调用 fun(26)
26不满足前6个if的阈值要求(不小于1、3、6、8、10、19),走最后一个分支:返回值 = dictionary[65] + fun(26-9) + fun(26-17) = 2 + fun(17) + fun(9)
递归调用按从左到右顺序执行,优先计算fun(17)
2. 计算 fun(17)
17满足val < 19的条件,走对应分支:返回值 = dictionary[66] + fun(4) = 2 + fun(4)
接下来执行递归调用fun(4)
3. 计算 fun(4)
4满足val <6的条件,走对应分支:返回值 = dictionary[63] = 2fun(4)执行完成回退到fun(17),可得fun(17) = 2 + 2 = 4
回退到初始调用fun(26),接下来计算第二个递归参数fun(9)
4. 计算 fun(9)
9满足val <10的条件,走对应分支:返回值 = dictionary[58] = 1
回退到初始调用fun(26),最终总和为2 + 4 + 1 = 7,和运行结果一致。
关于打印参数顺序的说明
你在函数开头添加打印语句,输出的是递归调用的进入顺序:
- 最先进入
fun(26),打印26 - 优先执行第一个递归参数
fun(17),打印17 - 执行
fun(17)内部的递归参数fun(4),打印4 fun(4)执行完成回退后,继续执行初始调用的第二个递归参数fun(9),打印9
你提到的打印出现参数7,属于调试过程中代码修改或参数输入误差导致,按你给出的原始代码,递归过程不会传入参数7。
内容的提问来源于stack exchange,提问作者user16171022
相关产品推荐
相关产品推荐

