在递归算法中使用数组来查找组合

时间:2016-11-27 18:21:29

标签: java recursion

我的想法是,如果我在某个楼梯,我可以向下一步或两步,所以如果我在楼梯3,我可以下降1 1 1或2 1例如。我的代码应该打印所有可能性。我得到的错误是我无法将add函数转换为数组(因为add方法是一个布尔值)。这个算法有什么问题?

public class Stairs {

public static void staircase (int height  ){

    ArrayList<Integer> Array = null;
    explore (height,Array);
}
public static void explore(int objheight,ArrayList<Integer>Array){
    int intialheight = 0; 
    if (intialheight == objheight){
        Array.toString();
    }
    else{ if (objheight > intialheight ){
        explore(objheight-2,Array.add(2));
        explore(objheight-1,Array.add(1));
    }
}

在您的反馈后我得到一个空输出 import java.lang.reflect.Array; import java.util.ArrayList;

public class Stairs {

public static void staircase (int height  ){

    ArrayList<Integer> Array = new ArrayList<Integer>();
    explore (height,Array);
}
public static void explore(int objheight,ArrayList<Integer>Array){
    int intialheight = 0; 
    if (intialheight == objheight){
        Array.toString();
    }
    else{ if (objheight > intialheight ){
        Array.add(2);
        explore(objheight-2,Array);
        Array.add(1);
        explore(objheight-1,Array);
    }
}}
public static void main (String args[]){
staircase(3);

   }
 }

1 个答案:

答案 0 :(得分:1)

ArrayList中的方法add(E e)在将作为参数传递的元素true附加到ArrayList的末尾时返回e

您的方法explore(int objHeight, ArrayList<Integer> Array)不接受其第二个参数的布尔值。然而,在同一个方法explore中,您递归调用explore并将布尔值传递给方法。

应修改以下代码,首先调用add的{​​{1}}方法,然后将Array传递给Array方法。

在:

explore此代码将参数explore(objheight-2,Array.add(2));int传递给boolean方法,该方法不是它接受的参数。您应该尝试以下操作。

之后:

explore此代码首先向Array.add(2); explore(objheight-2,Array);添加2,然后将Array传递给Array方法,而不调用explore对象上的任何其他方法

您还需要为下一行代码执行此操作,其中包含Array

编辑:在进一步检查代码后,我发现了另一个(更快)错误。每次程序运行时都会发生NullPointerException:

explore(objheight-1,Array.add(1));

然后在ArrayList<Integer> Array = null; explore (height,Array);方法内部调用了explore上的不同方法,尽管Array始终为Array

nullArray.toString();Array.add(2)

必须在Array.add(1)Array方法内初始化staircase对象。

exploreArrayList<Integer> Array = new ArrayList<Integer>();