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

Python中is_even、is_odd这组互相调用的递归函数运行原理是什么?

这段递归奇偶判断代码的运行逻辑

这段是典型的间接递归实现样例,用来判断非负整数的奇偶性,逻辑完全基于两个基础数学规则:

  • 0是偶数
  • 对任意正整数n,n的奇偶性和n-1相反

两个函数的各自逻辑

  • is_even(n):判断输入n是不是偶数
    • 终止条件:如果n等于0,直接返回True,对应0是偶数的规则
    • 递归逻辑:n不等于0时,返回is_odd(n-1)的结果,意思就是如果n-1是奇数,那n就是偶数
  • is_odd(n):判断输入n是不是奇数
    • 直接返回not is_even(n),意思就是只要不是偶数的非负整数,就都是奇数

实际运行示例

我们代入n=3跑一遍is_even(3)的完整流程,你就能看明白:

1. 调用is_even(3):3≠0 → 调用is_odd(2)
2. 调用is_odd(2) → 计算not is_even(2),先调用is_even(2)
3. 调用is_even(2):2≠0 → 调用is_odd(1)
4. 调用is_odd(1) → 计算not is_even(1),先调用is_even(1)
5. 调用is_even(1):1≠0 → 调用is_odd(0)
6. 调用is_odd(0) → 计算not is_even(0),先调用is_even(0)
7. 调用is_even(0):匹配终止条件 → 返回True

现在倒推返回结果:

is_odd(0) = not True → False
is_even(1) = 上一步的结果 → False → 1不是偶数,符合预期
is_odd(1) = not False → True → 1是奇数,符合预期
is_even(2) = 上一步的结果 → True → 2是偶数,符合预期
is_odd(2) = not True → False → 2不是奇数,符合预期
is_even(3) = 上一步的结果 → False → 3不是偶数,符合预期

注意事项

这段代码仅作递归教学使用,实际场景不要这么用:

  • 只能处理非负整数,输入负数会触发无限递归,最终栈溢出报错
  • 递归深度等于输入的数值大小,输入大数时运行效率极低,远不如直接取模n % 2 == 0判断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:09:01