Python是否支持间接递归?对应的实现方法有哪些?
Python 间接递归实现问题解答
结论先行
Python 没有前向声明语法完全不影响间接递归的实现,也不需要借助额外第三方模块即可实现。
实现原理
Python 函数在定义阶段只会校验语法合法性,不会检查内部调用的名称是否已经完成绑定,只有当函数实际被执行、触发内部调用逻辑时,才会去当前作用域查找对应名称绑定的可执行对象。因此只需要保证调用第一个递归入口函数时,所有涉及的递归函数都已经完成定义,即可正常运行间接递归逻辑。
代码示例
下面是最常见的判断奇偶的间接递归实现:
def is_even(n): if n == 0: return True # 定义阶段is_odd还未声明,不会触发报错 return is_odd(n - 1) def is_odd(n): if n == 0: return False return is_even(n - 1) # 调用时两个函数都已完成定义,运行正常 print(is_even(4)) # 输出:True print(is_odd(7)) # 输出:True
如果有提前引用函数变量的特殊需求,也可以先占位绑定再定义:
# 先声明占位变量 handler_a = None handler_b = None def handler_a(num): if num < 0: return num return handler_b(num - 2) def handler_b(num): if num < 0: return num return handler_a(num - 3) print(handler_a(10)) # 输出:-1
可选优化工具
如果有递归深度过大、重复计算过多的场景,可以用Python标准库functools模块下的lru_cache装饰器做结果缓存,降低重复计算开销,但这不属于实现间接递归的必需依赖。
内容的提问来源于stack exchange,提问作者Goldfish Doc
相关产品推荐
相关产品推荐

