所以,我有负责拉格朗日多项式计算的代码。此代码大量使用委托(fn_result声明为delegate float fn_result (float x)
。multiplier(x)
正确计算,尽管使用递归;但是,尝试计算polynom(x)
提供了一个堆栈溢出异常。有人可以告诉我它为什么会这样吗?(注意:多项式(x)初始化:)
fn_result polynom = x => 0.0f;
for (int i = 0; i != Lagrange_node_points.Length; i++)
{
fn_result multiplier = x => Lagrange_node_points[i].Y;
for (int k = 0; k != Lagrange_node_points.Length; k++) // p[k] cycle
if (k != i)
multiplier = x => (multiplier(x) * (x - Lagrange_node_points[k].X) / (Lagrange_node_points[i].X - Lagrange_node_points[k].X));
polynom = y => (polynom(y) + multiplier(y));
}
答案 0 :(得分:3)
你在这一行有一个无限的递归调用。
polynom = y => (polynom(y) + multiplier(y));
答案 1 :(得分:2)
正如@Eoin所说的那样,但multiplier
和polynom
实际上都是无限的。
测试此示例:
public static void Main(string[] args)
{
Func<int,int> f = x => x * 2 + 13;
f = x => f(x) + 1337; // Calling itself, not the original function
int res = f(1); // Stack overflow!
}