簡體   English   中英

如何遞歸地反轉數組

[英]How Do I Reverse An Array Recursively

我正在嘗試編寫一個采用整數數組的遞歸方法,並簡單地向后返回該數組。 到目前為止,這就是我所擁有的。

    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] 假設數組中沒有任何元素被重復。 我了解遞歸,只是嘗試在此處實施。

以下應該是遞歸的解決方案

  • 交換第一個和最后一個號碼
  • 反轉數組的其余部分

交換將需要一個臨時變量。

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

從數組長度-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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM