一个老生常谈的问题,斐波那契数组,

求第N个, 这里注意,

Integer 默认最大值 为 2147483647 即正数的21亿左右 ,对应斐波数的 Feib(46), eg:feib(46) = 1836311903
所有如果让你求 第50个feibo 数,Integer 是无法满足的,

同理,

Long 默认最大值 为 9223372036854775807  ,对应斐波数的 Feib(92), eg:feib(92) = 7540113804746346429
所有如果让你求 第100个feibo 数,Long是无法满足的,

最常见的,斐波两种求法:

递归

F(n) = F(n-1)+F(n-2)

//递归算法, 返回int,Oops,这个只能计算 46以内的。。private static int get(int num) {if (num <= 2) {return 1;}return get(num - 1) + get(num - 2);}

非递归算法(推荐) :

private static int getFibFori(int num) {if (num <= 2) {return 1;}int bef = 1;int aft = 1;int sum = 0;for (int i = 3; i <= num; i++) {sum = bef + aft;bef = aft;aft = sum;}return sum;}

或者

 /*** 非递归模式;** @param num num* @return int*/private static int getFib(int num) {if (num <= 2) {return 1;}int sum = 0;Queue<Integer> queue = new LinkedList<>();queue.add(1);queue.add(1);while ((num = num - 1) >= 2) {int bef = queue.poll();int after = queue.poll();sum = bef + after;queue.offer(after);queue.offer(sum);}return sum;}

*******************************************************

重点,如果让你求 第100个斐波那契数,摆明了就是 Integer 和Long 不可用

这里可以使用 BigInteher ,

注意这里,.add(new BigInteher("XXX")) 表示加,

/*** BigInteger 版本*/private static BigInteger febBig(int num) {if (num <= 2) {return new BigInteger("1");}BigInteger bef = new BigInteger("1");BigInteger aft = new BigInteger("1");BigInteger sum = new BigInteger("0");while (num > 2) {sum = bef.add(aft);bef = aft;aft = sum;num--;}return sum;}

这样可以将上面的 都改造为 BigInteger 版本

PPS: 斐波那契是有通项公式的,但是既然考察,不可能让你背 斐波公式,

Fn={[(1+√5)/2]^n-[(1-√5)/2]^n}/√5

这里权做 记录就好了。

over.

转载于:https://www.cnblogs.com/junyi0120/p/10622344.html

FeiBoStr 斐波那契相关推荐

  1. java 斐波拉_Java实现斐波那契数列

    斐波纳契数列,又称黄金分割数列,指的是这样一个数列:1.1.2.3.5.8.13.21.--在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n&g ...

  2. java 二分搜索获得大于目标数的第一位_程序员常用查找算法(顺序、二分、插值、分块、斐波那契)...

    顺序查找 基本思想 属于线性查找和无序查找,从一端开始顺序扫描,直到找到与目标值value相等的元素. 这是最基本的查找方法,也是时间复杂度最高的查找算法. 在数据过多时,这种方法并不适用. 代码实现 ...

  3. 剑指offer:面试题10- I. 斐波那契数列

    写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项.斐波那契数列的定义如下: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 ...

  4. 斐波那契算法举例(iterative Fibonacci algorithm)

    // count_change.cpp : Defines the entry point for the console application. // #include "stdafx. ...

  5. BZOJ2275[Coci2010]HRPA——斐波那契博弈

    题目描述 N个石子,A和B轮流取,A先.每个人每次最少取一个,最多不超过上一个人的个数的2倍. 取到最后一个石子的人胜出,如果A要有必胜策略,第一次他至少要取多少个. 输入 第一行给出数字N,N< ...

  6. 用递归法计算斐波那契数列的第n项

     斐波纳契数列(Fibonacci Sequence)又称黄金分割数列,指的是这样一个数列:1.1.2.3.5.8.13.21.--在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1, ...

  7. 循环斐波那契数列_剑指offer #10 斐波那契数列

    (递归和循环)#10 斐波那契数列 一.斐波那契数列 定义: n = 0 , f(n) = 0 n = 1 , f(n) = 1 n > 1 , f(n) = f(n-1) + f(n-2) 思 ...

  8. 用C语言编写:判断一个≥2的整型数是否存在于斐波那契数列中?

    自己写的,感觉挺有成就感的,就展示出来吧! 判断一个≥2的整型数是否存在于斐波那契数列中? 若存在,则返回第几项:若不在,则返回-1 #include <stdio.h> long gen ...

  9. 算法(1)斐波那契数列

    1.0 问题描述 实现斐波那契数列,求第N项的值 2.0 问题分析 斐波那契数列最简单的方法是使用递归,递归和查表法同时使用,可以降低复杂度. 根据数列特点,同时进行计算的数值其实只有3个,所以可以使 ...

最新文章

  1. oracle 用户 多个表空间
  2. ustc小道消息20220106
  3. Maven项目缺少Maven Dependencies解决方法总结
  4. slider使用TickPlacement获得游标效果
  5. set / ... 去重的方法
  6. ubuntu14.04 在自带python2.7上安装python3.3.5 可以用但是有问题
  7. sketch 将动图转换为json_UI设计师如何创建sketch设计样式、库和UI套件
  8. cocos3 动作回调函数
  9. 量子力学或证实人类生死并无意义
  10. 59. Event 例子
  11. C语言 用矩形法计算定积分∫(0—1)sinxdx、∫(-1—1)cosxdx、∫(0—2)e^xdx
  12. 74LS138译码器实现2位二进制乘法器-QuartusII 软件仿真
  13. C语言的程序设计流程、特点及要求
  14. 初识html5-当当网图书分类页面,html+css静态页面当当网案例
  15. mysql.sock.lock的作用_mysql.sock的作用
  16. 机器学习如何驱动业务实践?你想知道的都在这!
  17. Gamma校正及其实现
  18. 如何提高项目估算精准度?关键看5大影响因子
  19. mysql 时间计算器
  20. 从一到无穷大 #2 优雅的感知与处理Elephant Flows

热门文章

  1. 《幸福资本论》读书笔记
  2. 关于64位 MS SQL 导入导出 Oracle 引发 ORA-06413 的解决方法
  3. CentOS6.3.x86_64安装Trac
  4. this super 在接口以及实现类中所指的对象
  5. 冒号课堂§4.3:汇总范式
  6. ISE中将Verilog封装为IP核的方法
  7. 网络爬虫---json编码和解码
  8. java操作elasticsearch实现query String
  9. mysql merge 分区
  10. 智慧城市资金瓶颈亟待突破