结果继续得到-2147483647

时间:2014-11-24 00:15:19

标签: c# recursion

由于某种原因,我的代码中的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;
        }
    }
}

1 个答案:

答案 0 :(得分:2)

  1. for循环中,您要将1添加到对minNumber的调用结果中。
  2. 当bigNumber小于零时,该方法返回int.MaxValue
  3. int.MaxValue + 1 == int.MinValue
  4. 我会留给您逐步完成代码,但在第一个循环中,当bigNumber5时,您继续进行递归调用,减去array[0](它是1)。当方法调用返回bigNumber时,这将持续到0int.MaxValue。然后,您向其添加1(这会为您提供int.MinValue),然后返回此数字(因为它小于minNumberOCoins)。

    如果你能解释你想要完成的任务,我们可以提供更好的算法。