【问题标题】:How Do I Reverse An Array Recursively如何递归地反转数组
【发布时间】:2019-07-25 00:49:54
【问题描述】:

我正在尝试编写一个递归方法,它接收一个整数数组并简单地向后返回该数组。这是我到目前为止所拥有的。

    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]。假设数组中没有元素重复。我理解递归,只是想在这里实现它。

【问题讨论】:

  • 要实现递归(或调试递归函数),第一步是用文字说明您要用于解决问题的递归解决方案。我无法通过查看该代码来判断它正在尝试实施什么解决方案。您可以从解释您尝试实现的递归解决方案开始,但我认为一旦您这样做了,您就会很清楚如何实现它。

标签: java recursion


【解决方案1】:

以下应该是递归解决方案

  • 交换第一个和最后一个数字
  • 反转数组的其余部分

交换需要一个临时变量。

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

【讨论】:

  • 在您回答问题之前,我确实尝试过这个!我应该在这个问题上多花一点时间!非常感谢您的回答。很高兴知道有人跟我一样想。 :)
【解决方案2】:

从数组长度-1开始,减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;
}

【讨论】:

    猜你喜欢
    • 2012-10-20
    • 1970-01-01
    • 2014-04-03
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多