剑指offer
数组 斐波那契数列
题目描述
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。
n<=39
题目分析
方法一:由斐波那契数列定义得:
f
(
n
)
=
{
1
,
(n=1)
2
,
(n=2)
f
(
n
−
1
)
+
f
(
n
−
2
)
,
(n>2,n为整数)
f(n)= \begin{cases} 1, & \text {(n=1)} \\ 2, & \text{(n=2)}\\ f(n-1)+f(n-2),&\text{(n>2,n为整数)}\end{cases}
f(n)=⎩⎪⎨⎪⎧1,2,f(n−1)+f(n−2),(n=1)(n=2)(n>2,n为整数)
下面是JAVA算法实现:
public int Fibonacci(int n) {
if(n==0){
return 0;
}else if(n==1){
return 1;
}else if(n<=39&&n>1){
return Fibonacci(n-1)+Fibonacci(n-2);
}else{
return 0;
}
}
运行时间:891ms
占用内存:9452k
方法二
使用循环进行计算(递归重复计算太多)。
public int Fibonacci(int n) {
if(n==0){
return 0;
}else if(n==1){
return 1;
}else if(n<=39&&n>1){
//return Fibonacci(n-1)+Fibonacci(n-2);
int num1 = 0;
int num2 = 1;
int currentnum = 0;
for(int i =2;i<=n;i++){
currentnum = num1 + num2;
num1 = num2;
num2 = currentnum;
}
return currentnum;
}else{
return 0;
}
}
运行时间:10ms
占用内存:9364k