【发布时间】:2019-01-30 19:03:33
【问题描述】:
我有以下代码来搜索适合给定总和的组合。但是问题在于小数位数。
就像,当我尝试用 3.15 和 0.40 拟合总和 11.90 时,程序会启动一个无限循环。当我尝试使用 3.15 和 2.45 时,我收到以下正确的结果 (3.15 | 3.15 | 3.15 | 2.45)。
public static void findNumbers(List<double> ar, double sum, List<List<double>> res, List<double> r, int i)
{
// If current sum becomes negative
if (sum < 0)
{
return;
}
// if we get exact answer
if (sum < 2)
{
res.Add(r);
return;
}
// Recur for all remaining elements that
// have value smaller than sum.
while (i < ar.Count() && sum - ar[i] >= 0)
{
// Till every element in the array starting
// from i which can contribute to the sum
r.Add(ar[i]); // Add them to list
// recur for next numbers
findNumbers(ar, sum - ar[i], res, r, i);
i++;
r.RemoveAt(r.Count() - 1);
}
}
我知道如何去掉这个循环。
【问题讨论】:
-
这并不能回答你的问题,但
if (sum == 0 || sum < 2)的第一次检查似乎是多余的;如果sum == 0,那么它也总是小于2,所以if (sum < 2)可以。 -
使用调试器并单步调试您的代码。您似乎遇到了
sum - ar[I]永远不会小于 2 的情况。此外,如果您显示用于调用导致无限循环的此方法的代码,将会很有帮助。
标签: loops sum combinations infinite-loop c#-2.0