在Python中递归地定义函数

2024-02-06

我有一个关于 lambda 函数的简单问题。我想做一个循环,其中每次迭代都根据前一次迭代中的 lambda 函数定义一个新的 lambda 函数。

f = lambda x: x**2
j=0
J=2
while j<J:
    f2 = lambda x: 0.5*f(x)
    f = f2
    j+=1

我预计 f(3) 的结果为 2.25 = 0.5*0.5*3**2。但是,我收到以下错误:

RecursionError: maximum recursion depth exceeded

我以为lambda函数可以像这样灵活使用。我想有一种已知的Pythonic方法可以正确地做到这一点?


名字f在你的 lambda 内部被查找当 lambda 被调用时- 此时它指的是 lambda 本身,因此是无限递归。

在特定时刻捕获值的常用习惯用法是使其成为 lambda 的默认参数,该参数在定义时进行评估:

    f2 = lambda x, f=f: 0.5*f(x)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在Python中递归地定义函数 的相关文章

随机推荐