2015-11-01 100 views
0

所以我有一個globar數組和一個遞歸函數。例如,遞歸函數本身執行16次,並且只應該到達bestOrder=array2D行兩次。程序實際上只到達它兩次,但是bestDrder每次在此行中更改array2D時都會更改它的值(array2D[position] = i;)。 BestOrder應包含2 0 3 1個訂單,但在功能的末尾包含3 2 1 0(數組2D的最後一個值)。我該如何解決這個問題?全局數組遞歸函數問題

private static int[] bestOrder; 

private static void Permutate(int[] array2D, int position, Point[] checkpoints) 
     { 

      if (position == array2D.Length) 
      { 
       if (GetPathLen(checkpoints, array2D) < min) 
       { 
        min = GetPathLen(checkpoints, array2D); 
        bestOrder= array2D; 
       } 

       return; 

      } 


      for (int i = 0; i < array2D.Length; i++) 
      { 
       bool found = false; 
       for (int j = 0; j < position; j++) 
        if (array2D[j] == i) 
        { 
         found = true; 
         break; 
        } 
       if (found) continue; 

       array2D[position] = i; 
       Permutate(array2D, position + 1, checkpoints); 
      } 
     } 
+0

閱讀有關參考/值類型,你會明白:) – MajkeloDev

+0

我沒有,但它並沒有很幫助我在這種情況下 –

回答

1

數組是引用類型意味着它們在被賦值給變量或傳遞給方法時實際上不會被複制。相反,它們的引用被傳遞(指向內存中相同位置的指針)。一種方法是Clone並轉換爲實際複製數組。

bestOrder = (int[])array2D.Clone(); 

另一種方法是創建空數組。並用另一個數組的元素填充它。

bestOrder = new int[array2D.Length]; 

for(int i = 0; i < bestOrder.Length; i++) 
{ 
    bestOrder[i] = array2D[i]; 
} 
+0

非常感謝!!!!!!!! –