【C语言】递归问题(爬楼梯)
题目:
楼梯有n阶台阶,一次可以上1阶、2阶或者3阶台阶,使用递归的方法计算出有多少种走完楼梯的方式。
解题思路
图解:
思路:
- 到第一台阶方式:地面到第一台阶的方式,需要 1 步(1) = 1
- 到第二台阶方式:从地面一次走两步(1) + 从台阶 1 走一步(1) = 2
- 到第三台阶方式:从地面一次走三步(1) + 从台阶 2 走一步(1) + 从台阶 1 走两步(2)= 4
- 到第四台阶方式:从台阶 1 一次走三步(1) + 从台阶 2 走两步(2) + 从台阶 3 走一步(4) = 7
- 到第五台阶方式:从台阶 2 一次走三步(2) + 从台阶 3 走两步(4) + 从台阶 4 走一步(7) = 13
可以推导出来:
到台阶 n (n > 2)的方式:从台阶 (n - 3) 一次走三步 + 从台阶 (n - 2) 走两步, 从台阶 (n - 1) 走一步
-
从第四个开始都是把前面的步骤都加起来,形成一个递归的规则
递归代码:
int steps(int num) {
if (num < 0)
return 0;
if (num == 0 || num == 1)
return 1;
if (num == 2)
return 2;
return steps(num - 1) + steps(num - 2) + steps(num - 3);
}
狂丿丶磊少: NBNB
cmh20120102: 窗口生成还有第三个参数 值 含义 EX_DBLCLKS 在绘图窗口中支持鼠标双击事件。 EX_NOCLOSE 禁用绘图窗口的关闭按钮。 EX_NOMINIMIZE 禁用绘图窗口的最小化按钮。 EX_SHOWCONSOLE 显示控制台窗口。 EasyX 文档里有
搁浅的蒲公英: make_unique不是C++11的特性,放在C++11的专栏里不太合适
要做就做优质牛马: 按照第一个方法测试了,还是不行
VIRGO_尽兴自在: 1、GB2312-936 2.一个项目包含多个文件,每个文件的高级保存选项一致