Fibonacci算法的递推方程

时间:2013-03-29 10:48:01

标签: algorithm equation recurrence

我想找到递推方程来计算时间复杂度

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

我可以解决递推方程,但我很难找到方程和基本情况。

这是正确的等式吗?

T(n)= T(n-1)+ T(n-2)+1

,对于基本情况?

T(0)= 0

T(1)= 0

一般来说,如何找到算法的基本情况?

1 个答案:

答案 0 :(得分:3)

对于复杂性,此示例中的基本情况通常并不重要。我个人可能会设置T(0) = 1T(1) = 1,因为没有时间是零。但只要看看你的复发关系。它本身就是斐波纳契式的序列,无论基本情况如何,它都将成指数(几乎 - )。

基本情况的一般问题是你需要一个具体的答案(&#34;计算Fib(0)需要多长时间?&#34;),但实际的&#34;时间单位& #34;在复杂性计算中通常定义不明确。确切地说,您应该将T(0)定义为等于常量 k_1,并将T(1)定义为等于常量 k_2,并从那里工作。如果您需要常量的数值来解决递归关系,那么可能出现了问题。

同样,您可以将递归关系设置为T(n) = T(n-1) + T(n-2) + k_3

请注意,如果&#34;时间单位&#34;对于您的复杂性计算是&#34;添加的执行次数&#34;,忽略其他逻辑,那么您的基本情况在0是正确的。如果(例如)添加是由用户提供的函数完成的,那么这将是一种分析时间的有用方法,该函数的性能超出了分析的范围。