斐波那契数列的递归与非递归问题

斐波那契数列

是指1,1,2,3,5,8,13,,,,直到无穷, 这个数列从第3项开始,每一项都等于前两项和。
斐波那契相关问题有:
1.青蛙跳台阶问题
2.兔子繁殖问题
这两个问题其实本质和斐波那契数列很相似,只要搞懂斐波那契数列,这两个问题也就很容易解决了。
递归是什么?
1.递归就是函数调用自身。
2.使用递归要注意的是在一个递归中,必须有一个明确的递归结束条件,称为递归出口。
递归原理:
1.递推:把要计算多次的问题的求解推到最简问题。
2.回归:当获得这个最简问题的解,然后逐步返回,得到最终问题结果。
递归的优点:
代码简洁清晰,可读性良好,节省了代码用量。
递归缺点:
1.递归中很多计算都是重复的,由于其本质是把一个问题分解成两个或者多个小问题,多个小问题存在相互重叠的部分,则存在重复计算,
2.调用栈可能会溢出,其实每一次函数调用会在内存栈中分配空间,而每个进程的栈的容量是有限的,当调用的层次太多时,就会超出栈的容量,从而导致栈溢出。

求斐波那契数列的第N个数的非递归算法
#include<stdio.h>
#include<windows.h>
int main()
{
	int a = 1, b = 1, s = 0,n=0;
	scanf_s("%d", &n);
	if (n == 1 && n == 2)
	{
		printf(" 1" );
	}
	while (n-2)
	{
		
		s = a + b;
		a = s;
		b = a;
		n--;//1
	}
	printf("%d", s);
	system("pause");
	return 0;
	}
递归算法:
int fib(int n)
{
	if (n <= 2)
	{
		return 1;
	}
	else
		return fib(n - 1) + fib(n - 2);
		}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值