C语言用两种方法写青蛙跳台阶,函数递归和while循环。

目录

一 提出问题

二 分析问题

三 总结


  一只青蛙要跳上一定数量的台阶,但其一次只能跳一阶或两阶,求这只青蛙跳上N上台阶有多少种跳法?

二 分析问题

  因为青蛙每次只能跳一个台阶或两个台阶,因此可先对两种比较简单的情况分析:

跳一个台阶只有一种跳法 跳一下。

跳两个台阶有两种跳法 一下一下跳 或者 一下跳两个。

那么跳N个台阶有多少种跳法呢???

 

第N个台阶的方法个数是N的前两个数的和,这个题和求第N个斐波那契数列思路一样的。

公式为:f(N-2)+(N-1)。

递归代码如下:

#include<stdio.h>
int frog_step(int N)
{
	if (N <= 2)
		return N;
	else
		return frog_step(n - 1) + frog_step(n - 2);
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	int ret = frog_step(N);
	printf("%d", ret);
	return 0;
}

但是用递归的方式一旦N的值比较大,就会做很多重复的运算,所以说在这个地方用递归的方式来写这个代码不太合适,改进如下:

#define _CRT_SECURE_NO_WARNINGS 1 //vs2019为使用scanf函数所用。
#include <stdio.h>
int f(int n)
{
	int a = 1;
		int b = 2;
		int c = 0;
	while(n > 2)//如果N的数大于2一直循环
	{
		if (n == 1)//当只跳一个台阶时只有一种跳法
		{
			return 1;
		}
		if (n == 2)//2种台阶两种跳法
		{
			return 2;
		}
		 c = a + b;不断的相加直到N小于2
		 a = b;
		 b = c;
		 n--;//防止死循环
	}
	return c;//几种跳法
}
int main()
{
	printf("青蛙要跳几个台阶=>");
	int n = 0;
	scanf("%d", &n);
	printf("青蛙会有几种跳法=>");
	printf("%d", f(n));

}

三 总结

其实青蛙跳台阶这个问题就是斐波那契额数列换了个问法,和斐波那契数列的思路是一样的,搞懂一个一通百通,只需要改动几个地方就可以了。所以说还是很容易的,小伙伴们学会了吗???

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值