另一种编写这种递归方法而不重载的方法?

时间:2014-03-19 03:56:21

标签: java arrays recursion

下面的代码是使用递归来填充具有重载的奇数数组。在转向重载之前,我一直在尝试编写一个递归方法,它在不使用重载的情况下执行相同的工作,只使用一个参数,这个参数可以是整数,而不是原始数组;但是,我无法找到一种不在每次递归时创建新数组的方法。任何人都可以用提示/伪代码/其他任何能让我编写此方法而不会重载的东西启发我吗?即使下面的代码有效,我也无法放下好奇心。 是的,我是最近学过递归的初学者。

public static int[] oddNumbers( int index ) {
    if(index<1){
        return null;
    }
    else if(index==1){
        return oddNumbers(1, new int[1]);
    }
    else{
        return oddNumbers(index, new int[index]);
    }
}
public static int[] oddNumbers(int index, int[] array){
    if(index==1){
        array[index-1]=index*2-1;
        return array;
    }
    else{
        array[index-1]=index*2-1;
        return oddNumbers(index-1, array);
    }
}

编辑:感谢所有评论。所有这些都非常有帮助。

2 个答案:

答案 0 :(得分:1)

我同意@Elliott Frisch。但是,如果你真的需要这样做,那么我建议你不要重载你可以用3参数声明一个方法。

例如: -

public static int[] oddNumbers(int index,int[] array,boolean flag){
    //Check the flag by passing true/false values and call the oddNumbers methods
}

当你不需要数组时,你可以传递null。但是,你需要维护一个标志显示你可以检查哪种方法应该以递归的方式调用。

希望它会对你有所帮助。

答案 1 :(得分:0)

我认为你想做的事情根本不可能。 java中的数组是静态的,所以你要么在开头创建一个全长数组,要么像往常一样将它传递给每个递归,要么在基本情况下创建一个全长数组,这会使你的函数不止一个参数。

另一方面,如果你要做的是练习递归,那么这里的自然数据结构将是一个列表,允许你追加你的&#34; new&#34;奇数(代码中的索引* 2-1)到递归调用返回的列表。您只能在基本案例(index == 1)上创建一个新列表,并且永远不会将其作为参数传递。