为什么Fibonacci递归算法运行得太慢?

时间:2016-02-18 15:03:59

标签: algorithm recursion

我使用递归算法使用java生成斐波纳契数。 该算法花费了太多时间来简单地添加2个数字(交叉10个数字)而不是人类。 Windows计算器甚至可以在几秒钟内执行大数字(Ex:7 ^ 1000)的功能。 Windows计算器和我的Fibonacci算法都可以在同一个Windows i5处理器上运行。

为什么我的Fibonacci算法花费了太多时间进行简单的添加?

2 个答案:

答案 0 :(得分:0)

fib的经典递归实现是这样的:

int fib(int n) {
    if (n < 2)
        return n;
    else
        return fib(n - 1) + fib(n - 2);
}

这个函数可以多次递归,它可以作为一个简单的基准来衡量各种语言的函数调用效率,时间复杂度为 O(φ n

你想要一个像魅力一样的迭代实现:

int fib(int n) {
    int a, b, c;
    if (n < 2)
        return n;
    for (a = 0, b = 1; n > 1; n--) {
        c = a + b;
        a = b;
        b = c;
    }
    return b;
}

答案 1 :(得分:0)

斐波纳契数呈指数增长,通常计算机可以在一秒内迭代n的10 ^ 8-10 ^ 9个值。如果您要执行递归函数,则可能是该函数正在使用很多值,因此程序执行缓慢。

此外,运行时不仅取决于处理器,还有其他各种因素(例如RAM,编程语言,内存等)。要检查程序的运行时,会使用诸如Big-Oh Notations之类的各种概念。