递归+lambda改写高阶函数n=0触发递归溢出问题求解决方案
问题根因
你当前的递归实现仅设置了n == 1这一个终止条件,当传入n=0时,程序会持续执行n-1的递减逻辑,递归深度无限增长,因此会触发RecursionError,调整递归上限无法解决本质问题,因为这是逻辑漏洞导致的无限递归。
修复方案
直接补充n==0的终止分支即可,符合原高阶函数的语义:当n为0时,不对输入参数做任何运算,直接返回原值,对应恒等函数。
修复后的代码:
def fn(f, n): return lambda x: x if n == 0 else f if n == 1 else lambda y: fn(f, n-1)(f(y))
验证测试
- 测试n=0场景:执行
print(fn(lambda x: sin(x), 0)(1000)),会直接输出1000,符合预期 - 测试n=5场景:计算
fn(lambda x: sin(x),5)(1),结果依然为0.587181,和原逻辑一致
内容的提问来源于stack exchange,提问作者Skeptic_0286
相关产品推荐
相关产品推荐

