0

所以,我有负责拉格朗日多项式计算的代码。这段代码大量使用委托(fn_result 被声明为delegate float fn_result (float x)尽管使用了递归,但仍能正确计算;但是,尝试计算会提供堆栈溢出异常。请有人告诉我为什么会这样?(注意: polynom(x) 已初始化: )multiplier(x) polynom(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));
}
4

2 回答 2

3

您在此行有一个无限递归调用。

polynom = y => (polynom(y) + multiplier(y));
于 2013-09-10T13:51:29.880 回答
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!
}
于 2013-09-10T14:07:56.910 回答