带有递归的嵌套函数

Jac*_*Guy 4 c# recursion flood-fill

我查看了大量参考资料,发现 C# 通过 lambda 支持嵌套函数,但我对 C#(以及 .NET)完全陌生。我想编写一个洪水填充实现,其中嵌套子函数可以访问父函数的参数。

理想情况下,它应该是这样的:

private void StartFloodFill(color,otherstuff,pixel)
{
      function Recursion(pixel,color)
      {
             do(otherstuff);
             //etc...
             Recursion(pixel,color);
      }
}
Run Code Online (Sandbox Code Playgroud)

电话Recursion(pixel,color);是我困惑的地方。我无法从函数内部访问对该函数的引用。

我知道应该有一个解决方法,但我不知道那是什么。如何在 C# 中实现上面演示的递归函数?

dca*_*tro 5

正如建议的,您可以使用递归委托。通常,您会像这样声明一个委托:

Func<int,int, int> = (a, b) => a+b;
Run Code Online (Sandbox Code Playgroud)

其中Func<int, int, int>是接受 2 个 int 并返回另一个 int 的委托的类型。

但由于您想让它调用自身,因此必须在分配委托之前声明变量。

Func<Pixel, Color, SomeType> func = null;

func = (pixel, color) => {
    //do stuff...

    if(endCondition)
       return someTypeValue;
    else
       return func(pixel, color);
};
Run Code Online (Sandbox Code Playgroud)