Java 如何递归地反转数组
我试图编写一个递归方法,它接受一个整数数组,并简单地向后返回该数组。以下是我到目前为止的情况Java 如何递归地反转数组,java,recursion,Java,Recursion,我试图编写一个递归方法,它接受一个整数数组,并简单地向后返回该数组。以下是我到目前为止的情况 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
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;
}
要实现递归(或调试递归函数),第一步是用文字说明要用于解决问题的递归解决方案。我看不出代码试图实现什么解决方案。你可以从解释你试图实现的递归解决方案开始,但我认为一旦你这样做了,你就会清楚地知道如何实现它!我应该在这个问题上多花点时间!非常感谢你的回答。很高兴认识像我这样有想法的人。:)