这是楼梯问题的递归形式(有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。
答案 0 :(得分:2)
这是一个选择问题。可以将递归视为选择和订购零个或多个1,零个或多个2和零个或多个3的组合的方式的总数,这些总和总计为n
。对n = 0
进行选择只有一种方法:不选择。
答案 1 :(得分:1)
在此代码中,n=0
表示在最后一步n
等于1
或2
或3
。换句话说:
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
了解更多信息