斐波那契数列

//使用迭代的方式
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];
    }
}

参考:《程序设计抽象思想》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章