我正在解决这个问题: 一个孩子正在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(0)= 0,因为没有办法爬上第0楼梯。
答案 0 :(得分:4)
更改以下内容:
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。他可以1种方式使用3个步骤攀登三个楼梯