题目

大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。
n<=39
斐波那契数列指的是这样一个数列:

第七题 斐波那契数列 - 图1
这个数列从第3项开始,每一项都等于前两项之和。

一、递归

一、分析

斐波那契数列的标准公式为:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)
根据公式可以直接写出:

二、代码

  1. public class Solution {
  2. public int Fibonacci(int n) {
  3. if(n<=1){
  4. return n;
  5. }
  6. return Fibonacci(n-1) + Fibonacci(n-2);
  7. }
  8. }

三、 复杂度

时间复杂度:O(2^n)O(2n)
空间复杂度:O(1)O(1)

二、优化递归

递归会重复计算大量相同数据,我们用个数组把结果存起来8!

  1. public class Solution {
  2. public int Fibonacci(int n) {
  3. int ans[] = new int[40];
  4. ans[0] = 0;
  5. ans[1] = 1;
  6. for(int i=2;i<=n;i++){
  7. ans[i] = ans[i-1] + ans[i-2];
  8. }
  9. return ans[n];
  10. }
  11. }

三、动态规划

  1. int a = 0;
  2. int b = 1;
  3. if(n<=1)
  4. {
  5. return b;
  6. }
  7. while(n>0)
  8. {
  9. b+=a;
  10. a=b-a;
  11. n--;
  12. }
  13. return b;