递归楼梯中的基本情况

Base Case in Recursive Staircase?

本文关键字:基本情况 递归楼      更新时间:2023-10-16

我正在解决这个问题:一个孩子跑上一个有n级台阶的楼梯,一次可以跳1级、2级或3级。实施一种方法来计算孩子可以跑上楼梯的可能方式。

我试图用这个来解决这个问题:

#include <iostream>
using namespace std;
int ways(int N){
if(N == 1 || N == 2) {
return N;
}else if(N <= 0) {
return 0;
}
return ways(N-1)+ways(N-2)+ways(N-3);
}
int main() {
cout<<ways(4);
return 0;
}

输出:4
预期输出:7

我采用f(0<=N(=0,f(1(=1和f(2(=2,其中f(x(是爬第x级楼梯的方式数。但是,它给出了错误的输出。然后,我查看了的解决方案,观察到f(0(=1也被考虑在内,根据我的说法,应该是f(O(=0,因为没有办法爬第0级楼梯。

更改如下:

if(N == 1 || N == 0) {
return 1;
} else if(N == 2) {
return 2;
}

考虑有三个步骤的情况。最后一次返回将执行路(n-1(+路(n-2(+路(n-3(这意味着方式(2(+方式(1(+方式(0(

这里的第三部分代表了孩子一次使用3个楼梯可以爬多少种方式。这将作为0返回,但应该是1。他可以在单程中使用3级台阶爬三级楼梯