次の問題で数時間待たずに、パッケージに収まるボックスの数を計算するコードがあります。そのためには、パッケージごとのパッケージとボックスのチェックボックスを計算します。ここでループ内でループを再帰的に書き直してループを使用する
は、コードは次のとおりです。
private bool CalculateOnePackage(Package package, List<Item> workItems, List<Item> packagedItemsList)
{
if (workItems.Count == 0)
{
return true;
}
var packages = new List<Package>();
Item tempItem = null;
foreach (Item entity in workItems)
{
if (/* execude code that changes entity and packages */)
{
tempItem = entity;
break;
}
}
if (tempItem == null)
{
return false;
}
packagedItemsList.Add(tempItem);
workItems.Remove(tempItem);
foreach (var p in packages)
{
this.CalculateOnePackage(p, workItems, packagedItemsList);
}
return true;
}
どのように私は使用のみループにコードを書き換えることができますか?このコードでは、StackoverflowException
が発生するという問題があります。
使用あなたはこのことを理解していればループを壊すパッケージのボックスのあなたの最大の限界に達し、その後、私は、同様のコードを掲載します – rashfmnb
の音でそれから、すでに入っているパッケージを含むすべてのパッケージをループしています。 – BugFinder
['Queue <' -class](https://msdn.microsoft.com/ja -us/library/7977ey2c(v = vs.110).aspx)を使用して、 'StackOverFlowException'を回避します。したがって、パッケージをキューに追加して処理し、パッケージをキューから削除します。 'queue.Count> 0'の間にキューをループしてください。 –