使用步长为1、2或3的C++方法计算到达第n阶楼梯的方法数
假设楼梯共有n阶。一个人一次可以跨越1、2或3阶。目标是找到到达楼上所有可能的走法。
我们将使用递归方法,记住为了到达任何第i阶,一个人必须从第i-1阶(跨越1阶)、第i-2阶(跨越2阶)或第i-3阶(跨越3阶)跳跃过来。
让我们用例子来理解。
输入
N=3 steps
输出
Count of ways to reach the nth stair using step 1, 2 or 3 are: 4
解释
There are total 3 steps Jump from start ( skip 3 ) : 3 step Jump from 1’st step (skip 2): 1+2 Jump from 2nd step (skip 1): 2+1 No skip 1+1+1
输入
N=6 steps
输出
Count of ways to reach the nth stair using step 1, 2 or 3 are: 24
解释
There are total 6 steps Ways: 1+1+1+1+1+1, 2+1+1+1+1, 3+1+1+1, 3+1+2, 3+2+1, 3+3 and so on.
下面程序中使用的方法如下:
我们将整数steps作为总步数。
函数stairs_step(int steps)接收总步数作为输入,并返回所有可能的到达楼上的方法数。
将初始变量count设置为0,表示方法数。
如果步数为0,则返回1。
如果步数为1,则只有一种方法。
如果步数为2,则只有两种方法(1+1或2)。
否则,方法数 = stairs_step(step-3) + stair_step(step-2) + stair_step(step-1)。
(递归方法)
示例
#include <iostream> using namespace std; int stairs_step(int steps){ if(steps == 0){ return 1; } else if(steps == 1){ return 1; } else if (steps == 2){ return 2; } else{ return stairs_step(steps - 3) + stairs_step(steps - 2) + stairs_step(steps - 1); } } int main(){ int steps = 5; cout<<"Count of ways to reach the nth stair using step 1, 2 or 3 are: "<<stairs_step(steps); return 0; }
输出
如果我们运行上面的代码,它将生成以下输出:
Count of ways to reach the nth stair using step 1, 2 or 3 are: 13
广告