簡體   English   中英

C#中奇怪的委托行為

[英]weird delegate behavior in C#

因此,我有負責Lagrange多項式計算的代碼。 此代碼是大量使用委托(fn_result被聲明為delegate float fn_result (float x)的。 multiplier(x) 正常盡管使用遞歸計算;但是,嘗試計算polynom(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));
}

您在這一行有一個無限遞歸調用。

polynom = y => (polynom(y) + multiplier(y));

正是因為@Eoin說,但兩個multiplierpolynom實際上是無限的。

測試此示例:

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!
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM