递归楼梯中的基本情况?
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 个步骤爬三个楼梯
【讨论】:
左路是什么意思?以上是关于递归楼梯中的基本情况?的主要内容,如果未能解决你的问题,请参考以下文章