由于某种原因,我的代码中的if else语句返回-2147483647。不知道为什么。我使用了断点,int.MaxValue是2147483647。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication9
{
class Program
{
static void Main(string[] args)
{
int [] array = {1,2,3};
int bigNumber = 5;
Console.WriteLine(minNumber(bigNumber, array).ToString());
Console.ReadLine();
}
private static int minNumber(int bigNumber, int[] array)
{
int minNumberOCoins = int.MaxValue;
if (bigNumber == 0) { return 0; }
else if (bigNumber <= 0) { return minNumberOCoins; }
for (int i = 0; i < array.Length; i++)
{
int returnedNumbers = minNumber((bigNumber - array[i]), array) +1;
if (returnedNumbers < minNumberOCoins)
{
minNumberOCoins = returnedNumbers;
}
}
return minNumberOCoins;
}
}
}
答案 0 :(得分:2)
for
循环中,您要将1
添加到对minNumber的调用结果中。 int.MaxValue
int.MaxValue + 1 == int.MinValue
我会留给您逐步完成代码,但在第一个循环中,当bigNumber
为5
时,您继续进行递归调用,减去array[0]
(它是1
)。当方法调用返回bigNumber
时,这将持续到0
为int.MaxValue
。然后,您向其添加1
(这会为您提供int.MinValue
),然后返回此数字(因为它小于minNumberOCoins
)。
如果你能解释你想要完成的任务,我们可以提供更好的算法。