题目:n级楼梯,一只青蛙一次可以跳1级,也可以一次跳2级,一共有多少种跳法?
分析:首先找规律
假设n=1,只有1种跳法,青蛙一次跳1级。
假设n=2,(1)青蛙可以一次跳1级,跳两次、2=1+1;(2)青蛙可以一次跳2级、2=2;2种方法。
假设n=3,(1)3=1+1+1;(2)3=1+2;(3)3=2+1;3种方法
假设n=4,(1)4=1+1+1+1;(2)4=2+2;(3)4=1+1+2;(4)4=1+2+1;(5)4=2+1+1;5种方法
.
.
.
n | 1 | 2 | 3 | 4 | 5 | 6 | … |
---|---|---|---|---|---|---|---|
方法数 | 1 | 2 | 3 | 5 | 8 | 13 | … |
发现,后一次方法数量是前两次的和,下面我们用代码来实现。
一,使用交换值实现
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int kind(int n)//分类函数进入,实现功能
{
int a = 1, b = 2, c = 3;
while (n > 2)//创建3个变量,一个用来存放前两个的和
{
c = a + b;//一个用来存放前两个的和
a = b;//实现整体向后平移和数的交换
b = c;//
n--;
}
return c;
}
int main()
{
int n = 0;
scanf("%d", &n);//输入楼梯级数
int ret = kind(n);//分类函数调用
printf("%d\n", ret);
return 0;
}
二,使用函数递归实现
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int kind(int n)//kind函数创建
{
if (n <= 2)
return n;//由于n=1和n=2时无法使用递归,直接返回n
else
return kind(n - 1) + kind(n - 2);
}//当n>2时,返回的前两个数的和,即再进入kind函数里
int main()
{
int n = 0;
scanf("%d", &n);
int ret = kind(n);//进入kind函数
printf("%d\n", ret);
return 0;
}
三,总结
此问题有两个要点,第一,就是找出规律;第二,即是对递归函数的理解应用。个人学习随记,若有问题,恳请佬们指出,一起提升。