FeiBoStr 斐波那契
一个老生常谈的问题,斐波那契数组,
求第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 斐波那契相关推荐
- java 斐波拉_Java实现斐波那契数列
斐波纳契数列,又称黄金分割数列,指的是这样一个数列:1.1.2.3.5.8.13.21.--在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n&g ...
- java 二分搜索获得大于目标数的第一位_程序员常用查找算法(顺序、二分、插值、分块、斐波那契)...
顺序查找 基本思想 属于线性查找和无序查找,从一端开始顺序扫描,直到找到与目标值value相等的元素. 这是最基本的查找方法,也是时间复杂度最高的查找算法. 在数据过多时,这种方法并不适用. 代码实现 ...
- 剑指offer:面试题10- I. 斐波那契数列
写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项.斐波那契数列的定义如下: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 ...
- 斐波那契算法举例(iterative Fibonacci algorithm)
// count_change.cpp : Defines the entry point for the console application. // #include "stdafx. ...
- BZOJ2275[Coci2010]HRPA——斐波那契博弈
题目描述 N个石子,A和B轮流取,A先.每个人每次最少取一个,最多不超过上一个人的个数的2倍. 取到最后一个石子的人胜出,如果A要有必胜策略,第一次他至少要取多少个. 输入 第一行给出数字N,N< ...
- 用递归法计算斐波那契数列的第n项
斐波纳契数列(Fibonacci Sequence)又称黄金分割数列,指的是这样一个数列:1.1.2.3.5.8.13.21.--在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1, ...
- 循环斐波那契数列_剑指offer #10 斐波那契数列
(递归和循环)#10 斐波那契数列 一.斐波那契数列 定义: n = 0 , f(n) = 0 n = 1 , f(n) = 1 n > 1 , f(n) = f(n-1) + f(n-2) 思 ...
- 用C语言编写:判断一个≥2的整型数是否存在于斐波那契数列中?
自己写的,感觉挺有成就感的,就展示出来吧! 判断一个≥2的整型数是否存在于斐波那契数列中? 若存在,则返回第几项:若不在,则返回-1 #include <stdio.h> long gen ...
- 算法(1)斐波那契数列
1.0 问题描述 实现斐波那契数列,求第N项的值 2.0 问题分析 斐波那契数列最简单的方法是使用递归,递归和查表法同时使用,可以降低复杂度. 根据数列特点,同时进行计算的数值其实只有3个,所以可以使 ...
最新文章
- oracle 用户 多个表空间
- ustc小道消息20220106
- Maven项目缺少Maven Dependencies解决方法总结
- slider使用TickPlacement获得游标效果
- set / ... 去重的方法
- ubuntu14.04 在自带python2.7上安装python3.3.5 可以用但是有问题
- sketch 将动图转换为json_UI设计师如何创建sketch设计样式、库和UI套件
- cocos3 动作回调函数
- 量子力学或证实人类生死并无意义
- 59. Event 例子
- C语言 用矩形法计算定积分∫(0—1)sinxdx、∫(-1—1)cosxdx、∫(0—2)e^xdx
- 74LS138译码器实现2位二进制乘法器-QuartusII 软件仿真
- C语言的程序设计流程、特点及要求
- 初识html5-当当网图书分类页面,html+css静态页面当当网案例
- mysql.sock.lock的作用_mysql.sock的作用
- 机器学习如何驱动业务实践?你想知道的都在这!
- Gamma校正及其实现
- 如何提高项目估算精准度?关键看5大影响因子
- mysql 时间计算器
- 从一到无穷大 #2 优雅的感知与处理Elephant Flows