递归 - 有n层楼的爬楼数量有多少

时间:2015-01-10 20:47:48

标签: java recursion

我有“蜘蛛侠”爬上有n层的建筑物。 如果他知道每次都能爬到一层或两层楼,他有多少选择到达n楼。

这是我到目前为止所做的:(没有数组,没有For循环,保持简单)

public static int spiderman(int n,int i,int sum){
    if ( n == 0 )    return 0;
    if ( n < i) return 0;
    if ( n == i) return 1;
    sum += i;
    return spiderman(n,i + 1,sum) + spiderman(n,i + 2,sum);
}


  public static void main( String [] args ){
        System.out.println(spiderman(4,0,0)); //Should return 5
    }

输出:spiderman(4)返回5. - 已解决!

1 个答案:

答案 0 :(得分:3)

我认为您的if ( n > i) return 0;应为if ( n < i) return 0;,反转标志。

此外,您似乎没有sum变量。它没有做任何事情,对你的功能结果没有影响

加成:

您需要回答的问题实际上与斐波那契序列相似。这意味着您将看到以下模式: spiderman(n,0,0)==蜘蛛侠(n - 1,0,0)+蜘蛛侠(n - 2,0,0)。 因为到达楼层的方式数量等于他可以到达低于+2楼以下楼层的方式,因为那些是他可以达到目标的楼层。

因此,这是您问题的替代解决方案

public static int spiderman(int n){
    if (n < 3) return n;
    return spiderman(n - 1) + spiderman(n -2);
}