斐波那契数列

来源:互联网 发布:井上真央松本润 知乎 编辑:程序博客网 时间:2024/05/29 11:42
//使用迭代的方式int fun1(int n){    if (n <= 2)        return 1;    int a, b, c;    a = 1;    b = 1;    for (int i=3; i<=n; i++)    {        c = a + b;        a = b;        b = c;    }    return c;}//使用打表的方式int f[100];int fun2(int n){    f[1] = f[2] = 1;    for (int i=3; i<=n; i++)        f[i] = f[i-1] + f[i-2];    return f[n];}//使用递归  f(n) = f(n-1) + f(n-2)int fun3(int n){    if (n <= 1)        return n;    return fun1(n-1) + fun1(n-2);}//fun3()在递归调用过程中产生大量冗余 很多f(n)会计算多次 改进如下int additiveSequence(int n, int t0, int t1){    if (n == 0)        return t0;    if (n == 1)        return t1;    return additiveSequence(n-1, t1, t0 + t1);}int fun4(int n){    return additiveSequence(n, 0, 1);}//将结果缓存,避免重复的递归int f[30];int fun5(int n){    if (n == 0)        return f[0] = 0;    else if (n == 1)        return f[1] = 1;    else    {        f[n] = fun(n-1) + fun(n-2);        return f[n];    }}参考:《程序设计抽象思想》

0 0