Fibonacci(斐波纳契)数列的计算

阅读更多

斐波纳契数列的计算是一个很老的话题了,出现在各种算法书中。今天写这篇博文的出发点是在网上看了MIT 6.00的公开课,正好把一些思路理清一些,毕竟有些东西,自己实践过后才有深刻的认识。

普通的递归计算

这是最简单的算法了,根据斐波纳契数列的定义就可以得出来:fib(n) = fib(n - 1) + fib(n - 2),具体的代码如下。(需要说明的是代码中都省略了对参数的检查,在实际的代码中是需要的)。

 

function fib(n) {
    return (n === 0 || n === 1) ? 1 : fib(n - 1) + fib(n - 2);
}

 

使用查找表的递归计算

普通的递归计算会执行很多重复计算,通过查找表就可以获取到之前已经计算过的fib(k)的值,从而避免重复计算。代码如下:

 

function fib_m(n) {
    var f = arguments.callee, m = f._m || (f._m = {0:1, 1:1});
    return m[n] || (m[n] = f(n-1) + f(n-2));
}
 

在这里,把查找表作为JavaScript方法对象的一个属性。

迭代计算

更加简单的做法是使用迭代来计算,代码如下:

 

function fib_i(n) {
    if (n === 0 || n === 1) { return 1; }
    var a = 1, b = 1, c;
    for (var i = 2; i <= n; i++) {
        c = a + b;
        b = a;
        a = c;
    }
    return c;
}

 这里用了3个变量,a和b分别表示f(n-1)和f(n-2),c表示f(n)。

你可能感兴趣的:(算法,F#,C,C++,C#)