通过使其成为包装器来优化Fibonacci序列的递归函数

时间:2016-04-07 22:28:30

标签: algorithm recursion fibonacci

在效率方面,斐波纳契序列的递归定义存在问题。它的定义如下:

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

假设我们称之为fib(5)。这使得1次调用fib(4),两次调用fib(3),3次调用fib(2),5次调用fib(1)和3次调用fib(0)。

在他的书中

  

Eric Roberts编写的Java抽象

Roberts提到我们可以通过认识到斐波纳契序列只是additiveSequence(int n, int t0, int t1)方法的一个特例来解决这个效率问题。基本上,Fibonacci序列只是一个严格以0和1开头的加法序列。有无数个序列与Fibonacci表示的递归关系相匹配。

作者解决了效率问题如下:

private int fib(int n) {
    return additiveSequence(n, 0, 1);
}

所以我的问题是,通过使fib序列成为更通用的additiveSequence方法的包装器,我们真的能提高效率吗?如果它确实遵循相同的精确重新关系,那么附加序列的实现在fib的效率方面是否会有相同的“问题”?

0 个答案:

没有答案