Java,以递归方式反转数组

13 java arrays reverse void

我没有找到任何具有我的功能的具体需求来做这件事,是的,这是为了做作业.

所以我有:

public void reverseArray(int[] x) {

}
Run Code Online (Sandbox Code Playgroud)

前提条件:x.length> 0

事实上,我不能让函数返回任何东西,唯一的参数是数组让我感到难过.

我已尝试使用循环和递归,但我尝试过的所有内容似乎最终都会产生无限的函数实例.

我已经有了一个想法/建议使用另一个功能以及这一个,但是,如何递归使用原始目标超出了我的目前.

任何帮助表示赞赏.

卢声远*_* Lu 10

void reverseArray(int[] x){
   reverse(x, 0, x.length -1);
}

void reverse(int[] x, int i, int j){
    if(i<j){//Swap
       int tmp = x[i];
       x[i] = x[j];
       x[j] = tmp;
       reverse(x, ++i, --j);//Recursive
    }   
}
Run Code Online (Sandbox Code Playgroud)

测试:

int[] s = new int[]{1,2,3,4,5};
reverseArray(s);
System.out.println(Arrays.toString(s));//"5,4,3,2,1"
Run Code Online (Sandbox Code Playgroud)

递归,O(n),不需要临时数组.


Cod*_*ice 8

如果我正在编写这个,我会创建一个临时数组(可能有一个元素被删除?),用于递归调用,并在从函数返回之前将元素复制回原始数组.您还需要找到一个基本案例来终止递归.


hqt*_*hqt 6

因为这是你的功课,我建议一个例子:

给定顺序: 1 2 3 4 5 6 7 8 9 10

你可以改为: 10 2 3 4 5 6 7 8 9 1

之后: 10 9 3 4 5 6 7 8 2 1

.....

如您所见,一步一步,序列"更好",问题是"更小".那么,你应该解决的问题是:

1)如何对此方法应用递归调用.对于原始,方法是:reverse(int[] a).所以,在第一步之后,你应该创建数组b from a[2] --> a[n-1].并使用reverse(int [] b)`.

2)反转后b,我们该怎么做才能扭转?再次将b的值分配回a.

3)停止条件:什么停止条件?您会看到数组b的元素少于数组a的元素.那么,到哪一步,我们应该停下来?

希望这有帮助:)