改进Fibonacci数列

来源:互联网 发布:欧陆天使淘宝店 编辑:程序博客网 时间:2024/05/29 12:37

1.递归

public class Solution {    public int Fibonacci(int n) {            if(n<=1)                return n;        return Fibonacci(n-1)+Fibonacci(n-2);    }}

当n越大时,耗时越长,因为有大量冗余操作
举个栗子:
n=4:

Fibonacci(4) = Fibonacci(3) + Fibonacci(2);
= Fibonacci(2) + Fibonacci(1) + Fibonacci(1) + Fibonacci(0);
= Fibonacci(1) + Fibonacci(0) + Fibonacci(1) + Fibonacci(1) + Fibonacci(0);

可以看到n=4的情况下Fibonacci(1)重复计算次数就已经高达3次

2.迭代
空间代价换取时间

public class Solution {    public int Fibonacci(int n) {            if(n<=1)                return n;        int a0=0,a1=1,a=1;        for(int i=1;i<n;i++){            a=a0+a1;            a0=a1;            a1=a;        }        return a;    }}

3.动态规划
时间空间上性能都比较好

class Solution {public:    int Fibonacci(int n) {        int f = 0, g = 1;        while(n--) {            g += f;            f = g - f;        }        return f;    }};
原创粉丝点击