【问题标题】:another way to write this recursive method without overloading?在不重载的情况下编写此递归方法的另一种方法?
【发布时间】:2014-04-25 02:38:59
【问题描述】:

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

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);
    }
}

编辑:感谢所有 cmets。他们都很有帮助。

【问题讨论】:

  • 为什么要用奇数填充数组?这对您有什么帮助?
  • 不一定是奇数。我正在用数组练习递归。

标签: java arrays recursion


【解决方案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。但是,你需要维护一个flag显示你可以检查哪个方法应该以递归的方式调用。

希望对你有所帮助。

【讨论】:

    【解决方案2】:

    我认为你想要做的事情根本不可能。 java中的数组是静态的,因此您可以在开始时创建一个全长数组并将其传递给每个递归,就像您所做的那样,或者在基本情况下创建一个全长数组,这将使您的函数需要多个论据。

    另一方面,如果您要练习递归,这里的自然数据结构将是一个列表,它允许您将“新”奇数(代码中的索引*2-1)附加到递归调用返回的列表。您只会在基本情况(索引 == 1)上创建一个新列表,并且永远不会将其作为参数传递。

    【讨论】:

      猜你喜欢
      • 2019-06-22
      • 1970-01-01
      • 2020-01-03
      • 1970-01-01
      • 2019-03-06
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      相关资源
      最近更新 更多