斐波那契数列
来源:互联网 发布:乌镇互联网大会 知乎 编辑:程序博客网 时间:2024/06/10 14:57
题目:
查找斐波纳契数列中第 N 个数。
所谓的斐波纳契数列是指:
- 前2个数是 0 和 1 。
- 第 i 个数是第 i-1 个数和第i-2 个数的和。
斐波纳契数列的前10个数字是:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34 ...
1、简单递归实现:
1234567891011
class Solution {public int fibonacci(int n) {if (n == 1) {return 0;} else if (n == 2) {return 1;} else {return fibonacci(n - 1) + fibonacci(n - 2);}}}
简单递归运算中,在n较大时,两次递归调用中存在大量的重复运算,导致运算速度非常慢,无法通过LinkCode
2、递归实现的优化:加入缓存
class Solution {
/*** @param n: an integer
* @return an integer f(n)
* @递归表示法,增加缓存
*/
ArrayList<Integer> buffer = new ArrayList<Integer>();//ArrayList是动态数组
public int fibonacci(int n) {
// write your code here
if(n==1) return 0;
else if(n==2) return 1;
int n1, n2, sn;
if(buffer.size()==0){
buffer.add(0);
buffer.add(1);//注意:buffer数组的角标是从0开始的,按着写的顺序依次加入
}
if(buffer.size()>n-2){
n1=buffer.get(n-3);//获取给定位置的元素,位置标号从0开始
n2=buffer.get(n-2);
}
else {
n1=fibonacci(n-2);
n2=fibonacci(n-1);
}
sn=n1+n2;
if(buffer.size()<n)
buffer.add(sn);
return sn;
}
}
3、非递归实现class Solution {
class Solution {
/**
* @param n: an integer
* @return an integer f(n)
* @非递归表示法
*/
public int fibonacci(int n) {
// write your code here
if(n == 1) return 0;
else if (n == 2) return 1;
else{
int n1 = 0;
int n2 = 1;
int sn = 0;
while (n > 2){
sn = n1 + n2;
n1 = n2;
n2 = sn;
n--;
}
return sn;
}
}
}
时间复杂度为 o(n) ,空间复杂度为
- 斐波那契数列数列计算
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- leetcode-461(Hamming Distance)
- androd stdio 编写蓝牙通信程序
- 【转载】JPush Android 推送如何区分开发、生产环境
- 2017年第0届浙江工业大学之江学院程序设计竞赛决赛 Problem E: qwb和李主席 (折半枚举!!!!n堆数分成最接近的两堆!!
- 非常好用的正则表达式"\\s+"
- 斐波那契数列
- 解决sublime下再次运行node,端口被占用无法再次运行问题
- 欢迎使用CSDN-markdown编辑器
- 将SQLServer表直接导入Oracle数据库(图文教程)
- Windows下利用osm2pgsql将OSM数据导入到Postgres中的方法
- 如何用C语言封装 C++的类,在 C里面使用
- svn查看某个时间段的日志信息
- 找不到localhost的网页错误怎么办?
- Spring MVC 笔记