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);