c语言: 斐波那契数列(递归和迭代)方法的比较

本文讨论了斐波那契数列的递归和迭代定义,比较了它们的优缺点,以及在求解n个斐波那契数时的两种方法。强调了迭代在避免递归带来的空间浪费和堆栈溢出问题上的优势。
摘要由CSDN通过智能技术生成

 斐波那契数列(Fibonacci sequence),又称黄金分割数列 ,因数学家莱昂纳多· 斐波那契 (Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称“兔子数列”,其数值为:1、1、2、3、5、8、13、21、34……在数学上,这一数列以如下 递推 的方法定z义:F(0)=1,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)。

迭代(把大事化小)递归,简讲就是自己调用自己,自己包含自己。

迭代的:两个必要条件

1.存在限制条件,当满足这个限制条件的时候,递归便不再继续。

2.每次递归调用之后越来越接近这个限制条件。

定义    优点    缺点
递归    重复调用函数自身实现循环    
a.用有限的循环语句实现无限集合;

b.代码易读;

c.大问题转化成小问题,减少了代码量。

a.递归不断调用函数,浪费空间

b.容易造成堆栈溢出

迭代    
利用变量的原值推出新值;

函数内某段代码实现循环。

a.效率高,运行时间只随循环的增加而增加;

b.无额外开销。

a.代码难理解;

b.代码不如递归代码简洁;

c.编写复杂问题时,代码逻辑不易想出

两者关系    
a.递归中一定有迭代,但是迭代中不一定有递归;大部分可以相互转换。

b.相对来说,能用迭代不用递归(因为递归不断调用函数,浪费空间,容易造成堆栈溢出)

递归与迭代:求n个斐波那契数列
1.递归方法
#include <stdio.h>
int Fib(int n)
{
	if (n <= 2)
		return 1;
	else
		return (Fib(n - 1) + Fib(n - 2));
}
//2.迭代方法
#include <stdio.h>
int Fib(int n)
{
	int a = 1;
	int b = 1;
	int c = 1;
	while (n > 2)
	{
		c = a + b;
		a = b;
		b = c;
		n--;
	}
	return c;
}

int main()
{
	int n = 0;
	int ret = 0;
	printf("请输入一个正整数:");
	scanf_s("%d", &n);
	ret = Fib(n);
	printf("ret=%d\n", ret);
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值