C语言函数递归例子2青蛙跳台阶问题

 接下来我们来看一下第二个例子青蛙跳台阶

C语言函数递归例子2青蛙跳台阶问题_第1张图片

青蛙跳台阶问题

 这个问题经常在各类面试中看到。一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。是实践函数递归的典型问题


分析问题

我们先假设有n个台阶,如果n=1,那么只有一种跳法,如果n=2,那么就有两种跳法。如果n=3,若第一次跳一阶,那么第二次跳二阶,若第一次跳二阶,那么第二次跳一阶,有两种情况,因此跳三个台阶时相当于先分类再相加前两种情况

即跳三个台阶跳法=跳一个台阶跳法+跳两个台阶跳法。

所以当有n个台阶时,假如青蛙第一次跳了1个台阶,那么剩下了n-1个台阶;假如青蛙第一次跳了2个台阶,那么剩下了n-2个台阶

那我们是不是可以这么想跳n个台阶的跳法=跳n-1个台阶跳法+跳n-2个台阶跳法


近似斐波那契数

综上,我们可以把这种问题看成斐波那契数。

C语言函数递归例子2青蛙跳台阶问题_第2张图片

第n个数=第(n-1)数+第(n-2)数

C语言函数递归例子2青蛙跳台阶问题_第3张图片

斐波那契数代码

#define _CRT_SECURE_NO_WARNINGS 1
#include 
int run(int x)
{
	if (x <=2)
		return 1;
	else
	{
		return run(x- 1) + run(x - 2);
	}
}
int main()
{
	int n = 0;
	int m = 0;
	scanf("%d", &n);
	m=run(n);
	printf("%d", m);

	return 0;
}

青蛙跳台阶代码

#define _CRT_SECURE_NO_WARNINGS 1
#include 
int tiao(int n)
{
	if (n == 1)
	{
		return 1;
	}
	else if (n == 2)
	{
		return 2;
	}
	else if (n > 2)
	{
		return tiao(n - 1) + tiao(n - 2);//递归
	}

}
int main()
{
	printf("青蛙要跳几个台阶=>");
	int a = 0;
	scanf("%d", &a);
	printf("青蛙会有几种跳法=>");
	printf("%d", tiao(a));

}

注意:虽然斐波那契数和青蛙跳台阶很相似,但当n=2时,斐波那契数是1,而青蛙跳台阶是2种跳法,所以,从这里开始斐波那契数列是1,1,2,3……而青蛙跳台阶跳法排序是1,2,3,5……虽说规律相同,但是不一样!!!

有什么问题各位大佬评论谢谢!!! 

C语言函数递归例子2青蛙跳台阶问题_第4张图片

你可能感兴趣的:(c语言,开发语言)