递归楼梯中的基本情况?

Posted

技术标签:

【中文标题】递归楼梯中的基本情况?【英文标题】:Base Case in Recursive Staircase? 【发布时间】:2018-07-24 16:28:54 【问题描述】:

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

【问题讨论】:

其他情况的答案是否正确? 因为你得到了f(0) = 1,如果N 为0,你应该返回1。你可以争辩说只有一种方法可以不爬楼梯(什么都不做)。 【参考方案1】:

更改以下内容:

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 个步骤爬三个楼梯

【讨论】:

左路是什么意思?

以上是关于递归楼梯中的基本情况?的主要内容,如果未能解决你的问题,请参考以下文章

Python算法-爬楼梯与递归函数

【算法题】12.爬楼梯问题

递归函数 - 楼梯

递归----小白上楼梯

(递归)3089:爬楼梯

爬楼梯-递归与迭代