递归拆分数组方法

时间:2014-09-15 22:14:55

标签: java arrays recursion

我试图编写一个递归方法,该方法接受整数数组并将交替元素复制到两个单独的数组中,直到没有要分割的元素为止。

例如:

[0 1 2 3 4 5 6 7 8 9]  
...  

[0 2 4 6 8]
[1 3 5 7 9] / 
[0 4 8]
[2 6] / 
[0 8]
[4] / 
[0]
[8] / 
[2]
[6] / 
[1 5 9]
[3 7] / 
[1 9]
[5] / 
[1]
[9] / 
[3]
[7] 

到目前为止,我已经能够分割初始数组,但我的递归不会终止。有什么建议吗?

以下是该方法的代码:

public static void halve(int[] a, int x)
{
    for (int i = 0; i < x; i = i + 2)
    {
        xList[i/2] = i;
        yList[i/2] = i + 1;
    }

    printList(xList);
    printList(yList);

    if (x-1 > 2)
        halve(xList, xList.length-1);
    else if (x-1 > 2)
        halve(yList, yList.length-1);
}

2 个答案:

答案 0 :(得分:2)

似乎xListyListint[]。在这种情况下,xList.length-1yList.length-1始终返回相同的数字,因此x的参数halve始终大于3,并且您的递归永不停止。

这更不用说其他问题了:

  1. 您正在使用索引而不是xList的元素填充yLista
  2. 如果i + 1为奇数,则x超出范围。
  3. ifelse if的条件相同 - 你绝对是另类别的。

答案 1 :(得分:0)

好的,此代码输出您想要的结果:

public class Recursive {
private static int[] array = {0,1,2,3,4,5,6,7,8,9};

public static void main(String[] args){
    half(array);
}
public static void half(int[] array){
    int[] evenarray,oddarray;
    if(array.length%2==1){
        evenarray = new int [array.length/2+1];
        oddarray = new int[array.length/2];
    }else{
        evenarray = new int [array.length/2];
        oddarray = new int[array.length/2];
    }
    for (int i=0; i<array.length; i++){
        if(i%2==0){
            evenarray[i/2]=array[i];
        }else{
            oddarray[i/2]=array[i];
        }
    }
    for(int i = 0; i<evenarray.length; i++){
        System.out.print(evenarray[i]);
    }
    System.out.println();
    for(int i = 0; i<oddarray.length; i++){
        System.out.print(oddarray[i]);
    }
    System.out.println();
    if(evenarray.length>1)half(evenarray);
    if(oddarray.length>1)half(oddarray);

}}