小兔跳台阶——递归算法题解
我正在参加「兔了个兔」创意投稿大赛,详情请看:「兔了个兔」创意投稿大赛
题目背景
新年伊始,在刷leetcode中途,一直在联想着与兔年相关的话题,在联想到兔子的一蹦一跳后,出现了这样的一道题目————
题目
Description
小兔跳台阶——
假如有n个台阶,小兔子每次只能跳上去1个台阶或2个台阶,请问跳到第n个台阶有几种走法?
为便于读者理解题意,这里举例说明如下:
假如有3个台阶,那么总计就有3种走法:第一种为每次上1个台阶,上3次;第二种为先上2个台阶,再上1个台阶;第三种为先上1个台阶,再上2个台阶。输入为n,输出为走到第n个台阶有几种走法
Input
比如输入是3
Output
如果输入是3,走到第3个台阶的走法总计有3种,1,1,1 和 1,2 和2,1,输出为3
Sample Input 1
4
Sample Output 1
5
题解:
#include <stdio.h>
int step(int n){
if(1 == n){
return 1;
}
if(2 == n){
return 2;
}
return step(n - 1)+ step(n - 2);
}
int main() {
int n, num;
scanf("%d", &n);
num = step(n);
printf("%d", num);
return 0;
}
- 我们把函数自身调用自身的操作,称为递归函数
- 递归函数一定要有结束条件,否则会产生死循环!
- 使用递归在解决一些问题时,可以让问题变得简单,降低编程的难度
- 关键点是找到解决该问题的公式——例如
step(n) = step(n - 1)+ step(n - 2); - 递归核心: 找公式+结束条件
小tips
在C++的学习中,往往会遇到main函数调用其他函数,或者各函数互相调用的流程
- 我们可习惯于一个程序由一个或多个程序模块组成,每个程序模块作为一个源程序文件。
- 对于较大的程序,通常将程序内容分别放在若干源文件中,再由若干源程序文件组成一个程序.这样处理便于分别编写、分别编译,进而提高调试效率(复试有用)。一个源程序文件可以为多个程序共用。
- 且所有函数都是平行的,即在定义函数时是分别进行的,并且是互相独立的。
- 一个函数并不从属于另一函数,即函数不能嵌套定义.函数间可以互相调用,但不能调用main函数。main 函数是由系统调用的,例如 main 函数中调用print_message 函数,而 print_message函数中又调用printstar函数,我们把这种调用称为嵌套调用.

浙公网安备 33010602011771号