查找斐波纳契数列中第 N 个数。
所谓的斐波纳契数列是指:
- 前2个数是 0 和 1 。
- 第 i 个数是第 i-1 个数和第i-2 个数的和。
斐波纳契数列的前10个数字是:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34 ...
算法实现:
package project;
public class Fibonacci {
//递归
public int fibRecursion(int n){
if(n==1)
return 0;
else if(n==2)
return 1;
else
return fibRecursion(n-1)+fibRecursion(n-2);
}
//非递归(迭代),两种都可以,空间复杂度为常数
/* public int fibIteration(int n){
int x=0,y=1;
for(int i=2;i<n;i=i+2){
x=x+y;
y=x+y;
}
if(n%2!=0)
return x;
else
return y;
}*/
public int fibIteration(int n){
int result=0;
int a=0,b=1;
if(n==1)
return 0;
else if(n==2)
return 1;
for(int i=3;i<n+1;i++){
result=a+b;
a=b;
b=result;
}
return result;
}
public static void main(String[] args) {
Fibonacci f=new Fibonacci();
int x1=f.fibRecursion(7);
int x2=f.fibIteration(7);
System.out.println("递归算法:"+x1+"\n非递归(迭代)算法:"+x2);
}
}