原题地址:821. 跳台阶 - AcWing题库
题目描述:
一个楼梯共有 n级台阶,每次可以走一级或者两级,问从第 0 级台阶走到第 n 级台阶一共有多少种方案。
输入格式:
共一行,包含一个整数 n。
输出格式:
共一行,包含一个整数,表示方案数。
数据范围:
1≤ n ≤15
输入样例:
5
输出样例:
8
实现过程:
1.递归介绍:递归函数:一种计算过程,如果其中每一步都要用到前一步或前几步的结果,称为递归的。用递归过程定义的函数,称为递归函数,例如连加、连乘及阶乘等。凡是递归的函数,都是可计算的,即能行的 。
古典递归函数,是一种定义在自然数集合上的函数,它的未知值往往要通过有限次运算回归到已知值来求出,故称为“递归”。它是古典递归函数论的研究对象 。
2.过程:利用递归解决,一般我们若能直接看出公式,例如斐波那契数列。显然,此题不可直接得出公式,那我们可以利用递归搜索树来枚举当台阶为n时的所有方案。
当n=5 时:
n从0开始递增,当增长为当前阶数k时,方案加一:if( n == k) cnt ++;
另一种情况,当n小于k时,先执行fun(n + 1);,后执行fun(n + 2),实际上执行深度优先。
代码实现:
#include <iostream>
using namespace std;
int n;//台阶
int cnt;//记录值
void fun(int k)
{
if( k == n) cnt ++;
else if(k < n)
{
fun (k + 1);
fun (k + 2);
}
}
int main()
{
cin >> n;
fun (0);
cout << cnt;
return 0;
}