**斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:
F(0) = 0, F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.

了解到它的规律后,我们很简单的能想到两种做法:
1.递归
2.迭代

对于一个我们已经了解其规律的函数,我们用递归可以很简单的求出它的结果
利用上面的规律,我们可以设计一个函数,当求第0个的时候返回0,第1个的时候返回1,而当他求的n大于1时,F(N) = F(N - 1) + F(N - 2),我们可以让函数返回一个F(N - 1) + F(N - 2),既自己调用自己

class Solution {
public:int fib(int N) {int a=0,b=1,c=1;if( N==0)return 0;if( N==1 )return 1;if(N>1)return fib(N-1) + fib(N-2);
};

这样我们就利用递归将一个复杂的问题给简单化了,但是递归函数有一个致命的缺陷,就是它消耗了大量的内存与时间,当我们输入的N的值过大时,他会计算很长的时间才能给出答案,因为这个递归的算法的时间复杂度为O(n^2)

如果想要节省时间取得更高的效率,我们可以采用迭代的方法。

class Solution {
public:int fib(int N) {int a=0,b=1,c=1;if( N==0)return 0;if( N==1 )return 1;while(N-->1){c = a+b;a = b;b = c; }return c;}
};

我们分别用了a,b,c三个变量。c代表当前项的斐波那契数,a代表前两项的,b代表前一项,我们在每一次计算完后将b的值赋给a,将c的值赋给b,使得我们可以一项一项的算出斐波那契数。而使用迭代的算法虽然比递归难理解,但是我们将时间复杂度降到了O(n),大大的提高了效率

斐波那契数的两种求法(迭代,递归)相关推荐

  1. 斐波那契数的两种实现方式———1.递归实现,2迭代实现

    对于斐波那契数,若是采用递归的算法,每个递归调用都将触发另外两个递归调用,而这两个中调用任意一个还会触发另外两个的调用.递归调用的时间复杂度O(2^N),空间复杂度为O(N),所以在计算略大的数会花费 ...

  2. 斐波拉契数的几种求法

    斐波拉契数列求法的题目有: 509 斐波拉契 面试题10-1 斐波拉契数列 70 爬楼梯 解法一: 傻递归 public class Solution {public int fib(int N) { ...

  3. “斐波那契数列”的两种算法

    "斐波那契数列"的两种算法 斐波那契数列有个规律:从第三个数开始,每个数是前两个数之和,比如: 1 1 2 3 5 8 13 21 34 55...... 现在通过两种方式(递归与 ...

  4. 递推公式斐波那契数列的几种求法

    什么是递推公式 递推公式就是形如斐波那契数列那样,每一项都由前面几项运算求得 下面以斐波那契数列为例讲解递推公式的几种求解方法 斐波那契数列 斐波那契数列形式如下: F(n)={1n=11n=2F(n ...

  5. C语言斐波那契数列求和两种方法

    递归调用函数: #define _CRT_SECURE_NO_WARNINGS int fun(int n); #include<stdio.h> int main() {//斐波那契数列 ...

  6. 斐波那契数列的两种解题方式

    第一种方式:采用递归 ​ def Fibonacci (n):if n==1 or n==2 : return 1else :return Fibonacci(n-2)+Fibonacci(n-1) ...

  7. 斐波那契 java_AcWing 717. 简单斐波那契(Java 两种写法)

    递推 时空复杂度皆为O(N) import java.util.Scanner; public class Main{ static int N = 50; static int f[] = new ...

  8. 斐波那契数列的两种实现呢

    //1.用递归实现function digui($n){if ($n <= 0) return 0; if ($n == 1) return 1; return digui($n - 2) + ...

  9. 斐波那契数列的两种实现思想

    1 非递归 python def fbnq_2():a=0b=1n = input()for i in range(int(n)):c=a+ba=bb=cprint(a) fbnq_2() js fu ...

最新文章

  1. struts2 验证框架原理及实例
  2. BETA:由清华大学等多家研究机构联合提出的面向SSVEP-BCI应用程序的大型基准测试数据库...
  3. 熟练掌握HDFS的Shell访问
  4. Android短消息备份闪退,Android Socket发送信息时闪退
  5. 如何保证 Serverless 业务部署更新的一致性?
  6. 使用 SAP CDS view SQL Function 将视图某些字段进行合并
  7. 在落雨的鼓浪屿打着伞到处走走找个地方坐坐
  8. SpringMVC 环境搭建
  9. VB根据窗体自动调整窗体内控件大小 注:实用,可以直接引用
  10. 21天Jenkins打卡Day13视图
  11. [转载] java中final,finally,finalize三者的作用和区别
  12. 【读史笔记】《晋书·卫玠列传》
  13. 《IIS6下运行PHP的方法》
  14. 通信总线模块:RS485、SP3232
  15. Excel怎么批量删除开头文本
  16. 关于java Stream流将list集合分组之后与原list的集合的顺序不一致的问题
  17. 从全面了解高级计量经济学体系+stata实操+实证研究前沿+论文+大数据机器学习+空间计量......._Stata高级计量经济学 陈强
  18. Android播放音乐案例分享
  19. Asp.Net Web Api 部署------在云服务器IIS上部署Web Api程序
  20. OTT与IPTV的区别是什么?

热门文章

  1. 循环计算-02-0到100数字累加
  2. spring事务管理-Transaction模板(了解)
  3. mysql的主键有什么作用_mysql设置主键有什么用
  4. VMware Workstation Pro 16 安装教程
  5. 程序猿到了30岁以后,是如何把自己逼死的
  6. mysql5.7 solo web服务器
  7. Ixia张林辉:测试系统让SDN更“迷人”
  8. ImageServiceImpl加@Service注解
  9. nodeJS下利用mongdb进行数据库操作
  10. 【学习笔记11】动态方法调用和使用通配符定义action