如何使用递归反转数组

3

我正在尝试编写一个递归方法,接收一个整数数组并将该数组反向返回。以下是我目前的代码。

    private static int[] reverseArray(int arr[]) {
    int arrDup[] = arr.clone();
    int x = 0, y = arrDup.length - 1;

    if (arrDup[0] == arr[arr.length - 1]) {
        return arrDup;
    }
    else {
        // System.out.println(Arrays.toString(arrDup));
        arrDup[y--] = arr[x++];
        return reverseArray(arrDup);
    }
}

public static void main(String[] args) {
    int arrPass[] = {1, 2, 3, 4, 5};
    System.out.println(Arrays.toString(reverseArray(arrPass)));
}

我该如何修复这个方法,以便它可以正确地将数组反转?当我运行它时,结果只有[1, 2, 3, 4, 1]。假设数组中没有重复的元素。我理解递归,只是在这里尝试实现它。


1
实现递归(或调试递归函数)的第一步是用语言表述你想要为问题使用的递归解决方案。从那段代码中我无法判断它试图实现什么解决方案。你可以先解释一下你尝试实现的递归解决方案,但我认为一旦你这样做了,你就会清楚如何实现它。 - Mark Adelsberger
2个回答

4
以下是递归解法:
  • 交换第一个和最后一个数字
  • 反转其余的数组元素

交换需要使用一个临时变量。

static void reverseArray(int[] arr, int start, int end) {
    if (start >= end)
        return;
    int temp = arr[start];
    arr[start] = arr[end];
    arr[end] = temp;
    reverseArray(arr, start + 1, end - 1);
}

public static void main(String[] args) {
    reverseArray(new int[]{1, 2, 3, 4, 5}, 0, 4);
}

在你回答这个问题之前,我确实尝试过这个方法!我应该多花点时间解决这个问题!非常感谢你的回答。很高兴知道还有其他人和我想法一样。 :) - Hasnain Ali

0

从数组长度-1开始递减到数组的一半。您可以使用mod(%)来获取起始位置。在初始调用时,请使用数组长度-1作为索引。

 public int[] reverseIt(int index , int [] main_Arr){
    if(index==(main_Arr.length)/2){
      return main_Arr;
    }

    int a =main_Arr[(main_Arr.length-1)%index];
    int b =main_Arr[index];
    main_Arr[(main_Arr.length-1)%index]=b;
    main_Arr[index]=a;
    reverseIt(index-1, main_Arr);
    return main_Arr;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接