C# 带递归的嵌套函数
我查阅了大量的参考资料,发现C#通过lambda支持嵌套函数,但我对C#(以及.NET)完全陌生。我想编写一个泛洪填充实现,嵌套子函数可以访问父函数的参数 理想情况下,它应该是这样的: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...
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:注意,您不必将函数赋值给变量-。。。但是,如果您希望非函数式程序员阅读您的代码,那么首先声明变量是非常好的(而且可能更好,尽管可能会无意中更改该变量)。