Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带递归的嵌套函数_C#_Recursion_Flood Fill - Fatal编程技术网

C# 带递归的嵌套函数

C# 带递归的嵌套函数,c#,recursion,flood-fill,C#,Recursion,Flood Fill,我查阅了大量的参考资料,发现C#通过lambda支持嵌套函数,但我对C#(以及.NET)完全陌生。我想编写一个泛洪填充实现,嵌套子函数可以访问父函数的参数 理想情况下,它应该是这样的: private void StartFloodFill(color,otherstuff,pixel) { function Recursion(pixel,color) { do(otherstuff); //etc...

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

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

private void StartFloodFill(color,otherstuff,pixel)
{
      function Recursion(pixel,color)
      {
             do(otherstuff);
             //etc...
             Recursion(pixel,color);
      }
}
递归(像素、颜色)呼叫是我的困惑所在。我无法从函数内部访问对函数的引用


我知道应该有一个解决办法,但我不知道那是什么。如何实现上面在C#?

中演示的递归函数正如建议的那样,您可以使用递归委托。通常,您会这样声明一个委托:

Func<int,int, int> = (a, b) => a+b;
Func=(a,b)=>a+b;
其中是接受2个整数并返回另一个整数的委托类型

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

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

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

    if(endCondition)
       return someTypeValue;
    else
       return func(pixel, color);
};
Func Func=null;
func=(像素,颜色)=>{
//做些事情。。。
如果(结束条件)
返回someTypeValue;
其他的
返回func(像素、颜色);
};

递归委托?不知道。你能解释一下吗?为什么要关门?这是一个完全合法的问题,没有什么是不清楚的。这个习惯用法在函数式编程中一直使用。@BitTickler Meta:+1:注意,您不必将函数赋值给变量-。。。但是,如果您希望非函数式程序员阅读您的代码,那么首先声明变量是非常好的(而且可能更好,尽管可能会无意中更改该变量)。