【问题标题】: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。你可以争辩说只有一种方法可以不爬楼梯(什么都不做)。

标签: c++ recursion


【解决方案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 个步骤爬三个楼梯

【讨论】:

  • 左路是什么意思?
猜你喜欢
  • 2015-02-22
  • 2020-08-03
  • 2015-10-11
  • 2014-10-27
  • 1970-01-01
  • 2018-06-26
  • 1970-01-01
  • 2014-10-20
  • 1970-01-01
相关资源
最近更新 更多