我从下面的代码中得到一个递归错误。有人能解释一下为什么会发生这种情况吗?代码的潜在修复可能是什么?在这段代码中,我尝试使用原始函数n1,并通过使用前面计算的函数并将它们存储在我创建的函数列表中来查找n2和n3。换句话说,我试图在for循环中执行一个递归函数。然后,我要计算存储在最后一行(h)的列表中的一个特定函数。
import numpy as np
f = lambda x: np.sin(10*x)
x0 = 0.5
h = 0.1
n1 = lambda h: (f(x0+h)-f(x0-h))/(2*h)
functions = []
functions.append(n1)
for i in range(0,2):
a = 1/(1-4**(i+2-1))
b = -4**(i+2-1)/(1-4**(i+2-1))
nh = lambda h: a*functions[i](h) + b*functions[i](h/2)
functions.append(nh)
print(functions[1](h))RecursionError:超过最大递归深度
发布于 2022-03-17 15:53:34
问题是,当循环完成迭代时,functions[i]是evaluated at the time each function is called,而i是2,这就创建了对functions[2]的无限递归引用。
方法之一是将函数创建代码放入一个单独的函数中,它为a、b和i创建一个封闭的作用域。
def make_function(n, previous_function):
a = 1/(1-4**(n+2-1))
b = -4**(n+2-1)/(1-4**(n+2-1))
return lambda h: a * previous_function(h) + b * previous_function(h / 2)
for i in range(2):
functions.append(make_function(i, functions[-1]))
print(functions[1](h))https://stackoverflow.com/questions/71514220
复制相似问题