我试图弄清楚如何使用 LINQ 来限制递归调用。
我使用以下代码的目的是遍历数字列表 ( num
),并为每个数字递归地计数/打印到设定的数量 ( 6
)。
newnum
我想要得到的顺序是:3 4 5 1 2 3 4 5 5 2 3 4 5
但我自然而然地陷入了无限循环。谓词并没有像我想象的.Where
那样停止循环,很可能我的基本情况已经关闭。关于设置它的正确方法的任何见解?谢谢你。
var num = new[] {3, 1, 8, 5, 2};
Func<int, int> writeString = delegate(int count)
{
Func<int, int> recursiveWrite = null;
recursiveWrite = n =>
{
Console.WriteLine("string " + n);
recursiveWrite(n+1);
return n;
};
return recursiveWrite(count);
};
var newnum = num.Where(n => writeString(n) < 6); // is this possible?
newnum.ToList().ForEach( w => Console.WriteLine(w));
我注意到下面的示例代码中出现了类似的停止模式,.Where
它只包括小于 7 的阶乘,我错过了什么?
var numbers = new[] { 5,1,3,7,2,6,4};
Func<int, int> factorial = delegate(int num) {
Func<int, int> locFactorial = null;
locFactorial = n => n == 1 ? 1 : n * locFactorial(n - 1);
return locFactorial(num);
};
var smallnums = numbers.Where(n => factorial(n) < 7);