2014-11-24 3 views
-3

어떤 이유로 내 코드의 if else 문은 -2147483647을 반환합니다. 이유를 모르겠다. 나는 브레이크 포인트를 사용 int.MaxValue, 당신은 minNumber의 호출의 결과에 1를 추가하여 for 루프에서 2147483647결과로 계속 -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

디버거를 사용하면 몇 개의 중단 점을 넣고 볼 수 있습니까? – zerkms

+0

중단 점과 디버거를 사용했습니다. 어떤 이유인지 else if 문은 int.MaxValue의 음수 버전을 반환합니다. – Aaron

+0

그래서 "어떤 이유"가 무엇입니까? 그것을 굳히지 않습니까? – zerkms

답변

2
  1. 입니다. bigNumber가 0보다 작은 경우
  2. 는 방법은 반환 int.MaxValue
  3. int.MaxValue + 1 == int.MinValue

내가 코드를 단계별로 당신에게 그것을 떠날거야,하지만 bigNumber5 때 첫 번째 루프에서, 당신은 계속 재귀 호출을 수행하여 array[0] (즉 1)을 뺍니다. 메서드 호출이 int.MaxValue을 반환 할 때 이 0 일 때까지이 작업이 계속됩니다. 그런 다음 1 (여기에는 int.MinValue이 표시됨)을 입력 한 다음이 번호를 반환합니다 (minNumberOCoins보다 작음).

달성하려는 것을 설명 할 수 있다면 더 나은 알고리즘을 도울 수 있습니다.

관련 문제