递归楼梯的基本案例?

时间:2018-07-24 16:28:54

标签: c++ recursion

我正在解决这个问题: 一个孩子正在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楼梯。

1 个答案:

答案 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个步骤攀登三个楼梯