青蛙跳台阶——函数递归思想

题目

一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级。求该青蛙跳上一个n 级的台阶总共有多少种跳法。

思考

如果只有一节台阶,那么小青蛙只有一种跳法

如果有两阶台阶,那么小青蛙有两种跳法

台阶数n跳法f(n)
11
22

递归思想

如果n=3,通过列举我们得出f(n)=3

第一种:1 1 1

第二种:1    2

第三种:2    1

通过观察发现,如果我们不考虑小青蛙在前面是如何跳的,那么小青蛙的最后一步可以分为两种情况:从倒数第二阶跳2到终点和从倒数第一阶跳1到终点;当我们把小青蛙的最后一步分成两种情况后,我们只需要分别考虑小青蛙在前(3-2)级台阶和前(3-1)级台阶中有多少种跳法

第一种情况:把台阶分成了最后2级台阶和前(3-2)级台阶,而前(3-2)级台阶有多少种跳法呢?通过上面的表格中,我们知道f(3-2)=f(1)=1;即第一种情况小青蛙只有1种跳法。

第二种情况:同理,我们得知,f(3-1)=2,即在这种情况下,小青蛙有两种跳法。

台阶n

f(n)

11
22
33
4?

我们用刚才的思想,计算一下n=4的时候,小青蛙有多少种算法

第一种情况:最后2级台阶和前(4-2)级台阶,f(4-2)=f(2)=2

第二种情况:最后1级台阶和前(4-1)级台阶,f(4-1)=f(3)=3

f(4)=f(2)+f(3)=5,经过列举法我们发现,结果正确。

由此,我们发现,小青蛙跳台阶的问题,本质上就是斐波那契数列的问题,我们利用递归的思想,将跳n级台阶的问题转化为跳(n-1)级台阶和跳(n-2)级台阶这两种情况的总和,那么我们就可以很轻松的写出代码。

代码

#include<stdio.h>
int Fib(int n) 
{
	if (n <= 2)
		return n;
	if (n > 2)
	{
		return Fib(n - 1) + Fib(n - 2);
	}

}
int main()
{
	int n = 0;
	int f = 0;
	printf("小青蛙要跳多少级台阶:>");
	scanf("%d", &n);
	f=Fib(n);
	printf("小青蛙一共有%d种跳法\n", f);
	return 0;
}

通过代码,我们迅速得出

台阶nf(n)
11
22
33
45
58
613
721
834
955
1089
......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值