楼梯问题-了解基本逻辑

时间:2019-10-24 13:49:29

标签: java algorithm recursion

这是楼梯问题的递归形式(有N个楼梯,一个站在底部的人想爬到顶部。这个人一次可以爬1个楼梯,2个楼梯或3个楼梯。计算数量)人到达顶端的不同方式。)

public static int findStep(int n) 
    { 
        if (n == 1 || n == 0)  
            return 1; 
        else if (n == 2)  
            return 2; 

        else
            return findStep(n - 3) +  
                   findStep(n - 2) + 
                   findStep(n - 1);     
    }

我的问题是,为什么我们在n = 0时返回1?

对我来说,n = 0意味着不再有楼梯,因此它应该返回0,但是如果我这样做,则该程序将无法用于其他非零输入。我在这个网站上看到了类似的问题,但是没有一个问题可以解释为什么我们在没有楼梯的情况下返回1。

3 个答案:

答案 0 :(得分:2)

这是一个选择问题。可以将递归视为选择和订购零个或多个1,零个或多个2和零个或多个3的组合的方式的总数,这些总和总计为n。对n = 0进行选择只有一种方法:不选择。

答案 1 :(得分:1)

在此代码中,n=0表示在最后一步n等于123。换句话说:

n-1=0,这意味着在最后一步n=1中,有一种方法可以到达楼梯的顶部。

n-3=0,这意味着在最后一步n=3中,因此到达阶梯顶部的一种方法是进行3步。

答案 2 :(得分:1)

  

我的问题是,为什么当n = 0时我们返回1?

这意味着只有一种可能的方法可以到达第一个楼梯。您可以通过https://medium.com/trick-the-interviwer/the-staircase-problem-9840b11201a5

了解更多信息