C语言函数递归在青蛙跳台阶的应用

题目: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种方法
.
.
.

n123456
方法数1235813

发现,后一次方法数量是前两次的和,下面我们用代码来实现。

一,使用交换值实现

#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;
}

三,总结

此问题有两个要点,第一,就是找出规律;第二,即是对递归函数的理解应用。个人学习随记,若有问题,恳请佬们指出,一起提升。

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值