尾递归实现斐波那契数列
一、斐波那契数列
斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368......
二、递归算法
1. 代码
public int fib(int n){
if(n==1 || n==2){
return 1;
}
return fib(n-1)+fib(n-2);
}2. 缺点:多次计算重复的fib(n),性能低,一般只用于说明递归算法
三、改进:空间换时间,把计算出来的fib(n)存储起来,不用重复计算,空间复杂度O(n)
public int fib(int n){
int[] array=new int[n];
array[0]=1;
array[1]=1;
for(int i=2;i<n;i++){
array[i]=array[i-1]+array[i-2];
}
return array[n-1];
}四、再次改进,空间减少到O(1),只存储3个数:前两个数和前两个数相加计算出来的结果
public int fib(int n){
int first=1;
int second=2;
int third=3;
for(int i=3;i<=n;i++){
third=first+second;
first=second;
second=third;
}
return third;
}五、尾递归
public int fib(int n,int first,int second){
if(n<=1){
return first;
}
rerurn fib(n-1,second,first+second);
}参考:
相关推荐
HeyShHeyou 2018-01-16
bizercsdn 2020-03-27
JakobHu 2020-01-03
llwang0 2019-12-28
GhostLWB 2019-12-14
qitong 2019-11-04
seekerhit 2019-10-20
Broadview 2019-06-27
风和日丽 2019-06-27
taiyangshenniao 2019-06-27
动态规划有时被称为递归的相反的技术。动态规划方案通常使用一个数组来建立一张表,用于存放被分解成众多子问题的解。当算法执行完毕,最终的解法将会在这个表中找到。今天我们先从我们最熟的斐波那契数列数列开始。
WindChaser 2019-06-21
hujun0 2013-03-19
HappyRocking 2019-05-16
HMHYY 2019-03-19
tingke 2015-08-09
天恒永恒 2017-01-12
iamlazyphper 2017-12-11