Algorithm 将Big-O递归算法简化为线性算法

Algorithm 将Big-O递归算法简化为线性算法,algorithm,recursion,optimization,jobs,Algorithm,Recursion,Optimization,Jobs,我遇到了以下问题: F(n)= 0 when n = 0; F(n)= 1 when n = 1; F(n)= F(n-1) + F(n-2) when n>1; 我已经可以像这样递归地解决这个问题: int F(int n) { if(n=0) return 0; if(n=1) return 1; if(n>1) return F(n-1) + F(n-2); } 但复杂性在^2上。如何解决这一复杂问题 要解决这样的问题,我需要读哪本书?这个函数正是您

我遇到了以下问题:

F(n)= 0 when n = 0;
F(n)= 1 when n = 1;
F(n)= F(n-1) + F(n-2) when n>1;
我已经可以像这样递归地解决这个问题:

int F(int n) {
    if(n=0) return 0;
    if(n=1) return 1;
    if(n>1) return F(n-1) + F(n-2);
}
但复杂性在^2上。如何解决这一复杂问题


要解决这样的问题,我需要读哪本书?

这个函数正是您要找的。是的,这是动态规划

static ArrayList<Double> getSeries(int n)
{
    ArrayList<Double> series = new ArrayList<>();
    series.add(0.0); // This is working as replacement of the F(0)
    series.add(1.0); // This is working as replacement of the F(1)
    double x, y;

    for (int i = 1; i < n; i++)
    {
        x= series.get(i - 1); // This is working as replacement of the F(n-2)
        y = series.get(i); // This is working as replacement of the F(n-1)
        series.add(x + y);
    }

    return series;
}
现在


动态规划是解决这个难题的方法。另外一个需要研究的是斐波那契序列。记忆是另一种你应该了解的技术。看见
Space Complexity :- log 
Time Complexity  :- 2^n
Space Complexity :- n
Time Complexity  :- n