2010-11-11 58 views
0

這裏是我如何調用下面的函數:c#爲什麼我的DECIMAL消極?

List<decimal> numbers = new List<decimal>(); 

    numbers.Add(210m); 
    numbers.Add(188.83m); 
    numbers.Add(67.93m); 
    numbers.Add(125.92m); 
    numbers.Add(35.92m); 
    numbers.Add(19.16m); 
    numbers.Add(98.48m); 



    List<decimal> listresult = FindSumSubset(9075.12m, numbers); 

** * ** * ** * ***功能 *

List<decimal> FindSumSubset(decimal sum, List<decimal> list) 
      { 
       for (int i = 0; i < list.Count; i++) 
       { 
        decimal value = list[i]; 
        if (sum - value == 0.0m) 
        { 
         return new List<decimal> { value }; 
        } 
        else 
        { 
         var subset = FindSumSubset(sum - value, list.GetRange(i + 1, list.Count-1 -i)); 
         if (subset != null) 
         { 
          subset.Add(value); 
          return subset; 


         } 
        } 
       } 
       return null; 
      } 

當我在調試模式下運行時,decimal sum給了我一個巨大的n例如-93435.34

這怎麼會發生?

+1

你的其他情況在for循環之外,是一個錯字? – 2010-11-11 22:28:38

+0

檢查您的代碼。在for循環之後你有一個else子句。 – 2010-11-11 22:30:13

+0

我想我修復了代碼(恢復了以前的一些編輯),但現在'新列表 {值};'不會編譯。 – egrunin 2010-11-11 22:35:07

回答

4

嘗試使這一變化:

if (sum - value <= 0.0m) 

的問題是,總和值是不完全0,所以它只是不斷遞歸永遠。

此外,我想你想要刪除for循環。如果你遞歸,你不需要它。

0

你滿溢而不檢查是我的猜測。

+2

我不認爲小數可以溢出。這是一個浮點,我認爲如果它變得太大而不是使用無窮大值,它甚至會拋出異常。 – CodesInChaos 2010-11-11 22:30:09

相關問題