class Solution {
public:
    // 注意要求空间复杂度是O(1) 所以不能用vector来做了
    // 先试试dp
    // 为了降低时间 再试试递归
    int recusion(int n)
    {
        if(n<3)
            return 1;
        else
        {
            return recusion(n-2) + recusion(n-1); // 按共公式递归调用
        }
    }
    
    int Fibonacci(int n) {

        if(n<3)
            return 1;
        // int dp1 = 1;
        // int dp2 = 1;
        // int tmp = 0;
        // for(int i=3; i<=n; ++i)
        // {
        //     tmp = dp1 + dp2; //递推

        //     dp1 = dp2;

        //     dp2 = tmp;
        // }

        // return tmp;

        int ans = recusion(n);

        return ans;


    }
};
  • 时间复杂度:O(2^n),每个递归会调用两个递归,因此呈现2的指数增长
  • 空间复杂度:O(n), 递归栈的最大深度

那还是不满足 更低时间复杂度