Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 递归分裂数组法_Java_Arrays_Recursion - Fatal编程技术网

Java 递归分裂数组法

Java 递归分裂数组法,java,arrays,recursion,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] 到目前为止,我已经能够分割初始数组,但我的递归不会终止。有

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

例如:

[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);
}
公共静态无效减半(int[]a,int x)
{
对于(int i=0;i2)
减半(xList,xList.length-1);
否则如果(x-1>2)
减半(yList,yList.length-1);
}

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

这还不包括其他问题,如:

  • 您正在用索引而不是
    a
    的元素填充
    xList
    yList
  • 如果
    x
    为奇数,
    i+1
    将超出范围
  • if
    else if
    的条件相同-您肯定是指其他内容

  • 确定此代码输出您想要的结果:

    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);
    
    }}
    
    公共类递归{
    私有静态int[]数组={0,1,2,3,4,5,6,7,8,9};
    公共静态void main(字符串[]args){
    半(阵列);
    }
    公共静态空半(int[]数组){
    int[]evenarray,oddarray;
    if(数组长度%2==1){
    evenarray=newint[array.length/2+1];
    oddarray=newint[array.length/2];
    }否则{
    evenarray=newint[array.length/2];
    oddarray=newint[array.length/2];
    }
    
    对于(int i=0;i什么是
    xList
    yList