请协助解析这段Python递归代码的实现逻辑
这段Python递归代码的逻辑解析
先看完整代码:
def is_even(x): if x == 0: return True else: return is_odd(x-1) def is_odd(x): return not is_even(x) print(is_odd(17)) print(is_even(23))
核心逻辑说明
这两个函数靠互相递归调用实现奇偶判断,本质基于两个数学常识:
- 0是偶数
- 一个数减1后,奇偶性会反转(奇数减1变偶数,偶数减1变奇数)
1. is_even(x)的逻辑
- 如果输入的
x是0,直接返回True(因为0是偶数) - 如果
x不是0,就调用is_odd(x-1)——意思是:只要x-1是奇数,那x肯定是偶数
2. is_odd(x)的逻辑
直接返回not is_even(x)——简单直白:不是偶数的数,就是奇数,完全依赖is_even的结果取反
实际运行过程示例
拿is_odd(17)来说
- 调用
is_odd(17),它会返回not is_even(17) - 调用
is_even(17),因为17≠0,所以返回is_odd(16) - 调用
is_odd(16),返回not is_even(16) - 调用
is_even(16),返回is_odd(15)
...
这个递归会一直往下减,直到x变成0:
- 当调用到
is_even(0)时,返回True - 然后开始逐层往回算:
is_odd(1)→not is_even(1)→not is_odd(0)→not (not is_even(0))→not (not True)→True
一路回溯后,is_odd(17)最终返回True
再看is_even(23)
同样递归到x=0时返回True,然后经过多次取反回溯,最终得到False(因为23是奇数)
最终输出结果
代码运行后会打印:
True False
内容的提问来源于stack exchange,提问作者Arpan Saha
相关产品推荐
相关产品推荐

