递归和非递归分别实现求第n个斐波那契数

【问题描述】:使用递归和非递归的方法分别实现求第n个斐波那契数,那么什么是斐波那契数斐波那契数指的是这样一个数列:1、1、2、3、5、8、13、21,后面的每一个数是前面两个数的和。

【解决方法】:
方法一:递归实现

思路:

参考代码:
#include<stdio.h>
#include<windows.h> 

int fabonacci(int n)
{
	if (n <= 2)
		return 1;
	else
		return fabonacci(n - 1) + fabonacci(n - 2);
}

int main()
{
	int n = 3;
	printf("请输入要求第几个数:");
	scanf("%d", &n);
	int ret = fabonacci(n);
	printf("ret=%d\n", ret);
	system("pause");
	return 0;
}

方法二:迭代(非递归)
当我们用递归实现了求第n个斐波那契数时,我们是否考虑到当n很大的时候这段代码的执行效率很低。 例如,在递归计算Fibonacci(10)时,Fibonacci(3)的值被重复计算了21次;在递归计算Fibonacci(30)时,Fibonacci(3)的值被重复计算了317811次!这个额外的花销是很大的,所以我们求一个很大的数时,应当考虑用迭代的方法。
参考代码:
int fabonacci(int n)
{
	int a = 1;//第一个数
	int b = 1;//第二个数
	int c = 1;//n<=2时,第三个数为1
	while (n > 2)
	{
		c = a + b;
		a = b;
		b = c;
		n--;
	}
	return c;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值