青蛙跳台阶(C语言)

青蛙跳台阶是个什么问题呢? 

一只青蛙一次最少可以跳一层台阶,最多可以一次跳两次台阶,该青蛙跳上n层台阶有多少种跳法?

分析问题

 由上图可见

1层台阶有一种跳法

2层台阶有2种跳法

3层台阶有3种跳法

4层台阶有5种跳法

......n层n种跳法

我们列个数列可以更直观的看出来

1  2   3   5   8   13   21    34    55   89

这个数列如果学过斐波那契数列的肯定会觉得和熟悉,这个青蛙跳台阶其实中心问题就是包含了斐波那契数列的思想

斐波那契数列:1  1  2   3   5   8   13    21   34   55  89

找规律:

其实学过斐波那契数列的都知道有一个公式就是

n<=2    Fib(1)

n>3     Fib(n-1)+Fib(n-2)

青蛙跳台阶的规律

Fib(1) = 1 ,  Fib(2) = 2

当n>=3时,Fib(n)=Fib(n-1)+Fib(n-2)

对比一下上面两个公式可以看出两个公式其实差别不大

下面我用C语言用递归的方法的代码放在下面可以参考一下

int Fib(int n)
{
	if (n == 1 || n == 2)
	{
		return n;
	}
	else
	{
		return Fib(n - 1) + Fib(n - 2);
	}

}

int main()
{
	int n = 10;
	int i = 0;
	for (i = 1; i <=n ; i++)
	{
		printf("%d\n", Fib(i));
	}
	return 0;
}

上面这个用递归写的代码时可以运行的,但是变量n如果比较大的情况下呢可能会造成栈溢出,而且计算机在进行大量的重复计算,上面这个代码的效率会很低。

下面我用迭代的方法写一下

int Fib(int n)
{
	int a = 1;
	int b = 2;
	int c = 0;
	int i = 0;
	for  (i = 1; i <=n; i++)
	{
		if (i == 1 || i == 2)
		{
			printf("%d\n", i);
		}
		else
		{
			c = a + b;
			a = b;
			b = c;
			printf("%d\n", c);
		}
	}
}
int main()
{
	int n = 10;
	Fib(n);
	return 0;
}

上面的迭代方法呢主要精思想就是“大事化小”。

下面我用图来解释一下:

 上图就是迭代方法的分析

在使用递归方法的时候如果造成栈溢出或者效率很低的时候就可以使用非递归的方法来写这个代码(比如上面的递归的方法)

以上是我自学c语言的递归和迭代之后对青蛙跳台阶的这个问题的看法 ,上面大部分的内容是我做笔记的。有哪里不对还请联系我改正。

感谢观看!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值