递归函数中的全局数组问题



所以我有一个globar数组和一个递归函数。例如,递归函数自身执行16次,并且bestOrder=array2D行应该只到达两次。程序实际上只到达它两次,但每次在行中更改array2D(array2D[position] = i;)时,bestOrder都会更改其值。BestOrder应包含2 0 3 1顺序,但在函数的末尾,它包含3 2 1 0(array2D的最后一个值)。我该怎么解决?

   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);
            }
        }

数组是引用类型,这意味着当它们被分配给变量或传递给方法时,它们实际上不会被复制。相反,它们的引用被传递(指向内存中相同位置的指针)。一种方法是Clone和强制转换来实际复制数组。

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

另一种方法是创建空数组。并用另一个阵列的元素填充它。

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

相关内容

  • 没有找到相关文章