You need to enable JavaScript to run this app. 如何理解带多个if判断的Python递归函数的调用逻辑与计算过程?
优惠活动
大模型
产品
解决方案
定价
更多

如何理解带多个if判断的Python递归函数的调用逻辑与计算过程?

Python递归函数fun执行流程详解

先提取本次计算会用到的字典映射,避免反复查表:

  • dictionary[53] = 3
  • dictionary[58] = 1
  • dictionary[63] = 2
  • dictionary[65] = 2
  • dictionary[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] = 2
fun(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,和运行结果一致。

关于打印参数顺序的说明

你在函数开头添加打印语句,输出的是递归调用的进入顺序:

  1. 最先进入fun(26),打印26
  2. 优先执行第一个递归参数fun(17),打印17
  3. 执行fun(17)内部的递归参数fun(4),打印4
  4. fun(4)执行完成回退后,继续执行初始调用的第二个递归参数fun(9),打印9
    你提到的打印出现参数7,属于调试过程中代码修改或参数输入误差导致,按你给出的原始代码,递归过程不会传入参数7。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 16:24:08