07斐波那契数列–剑指offer, java版
题目描述
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。P75
n<=39
分析:
方法1:用递归
public class Solution {
public int Fibonacci(int n) {
if(n<=0) return 0;
if(n == 1) return 1;
return Fibonacci(n-1) + Fibonacci(n-2);
}
}
但是用递归的话,很多点会重复计算多次(如计算f(4)=f(3)+f(2),需f(3)=f(2)+f(1),又f(2)=f(1)+f(0),但其实f(3)、f(2)之前都已经算过了)时间复杂度太大。
方法2:从下往上计算,这样就不会计算多次了
public class Solution {
public int Fibonacci(int n) {
if(n < 0) {
System.out.println("wrong input");
return 0;
}
if(n == 0) return 0;
if(n == 1) return 1;
int fibOne = 0;
int fibTwo = 1;
int fibNum = 0;
for(int i = 2;i <= n; i++){
fibNum = fibOne + fibTwo;
fibOne = fibTwo;
fibTwo = fibNum;
}
return fibNum;
}
}