斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。

大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。

n<=39

这个题可以说是迭代(Iteration) VS 递归(Recursion),
f(n) = f(n-1) + f(n-2),第一眼看就是递归啊,简直完美的递归环境,递归肯定很爽,这样想着关键代码两三行就搞定了,注意这题的n是从0开始的:

方法一:递归

1
2
3
4
5
6
7
8
9
10
if (n<= 1 ){
     return n;
}
int [] record =  new int [n+ 1 ];
record[ 0 ] =  0 ;
record[ 1 ] =  1 ;
for ( int i= 2 ;i<=n;i++){
     record[i] = record[i- 1 ] + record[i- 2 ];
}
return record[n];
虽然看起来很蠢,空间浪费了sizeof(int)*(n-1),但是对于那个超大n的测试用例应该是可以通过了,时间复杂度也达到了O(n)。

方法二:非递归

public class Solution {
     public int Fibonacci( int n) {
         int a= 1 ,b= 1 ,c= 0 ;
         if (n< 0 ){
             return 0 ;
         } else if (n== 1 ||n== 2 ){
             return 1 ;
         } else {
             for ( int i= 3 ;i<=n;i++){
                 c=a+b;
                 b=a;
                 a=c;
             }
             return c;
         }
     }
}


你可能感兴趣的:(java,算法)