fibonacci - 为什么这个斐波那契数函数在 O(log N) 中不起作用?

标签 fibonacci

所以 log (N) 的斐波那契数 - 没有矩阵。

Ni // i-th Fibonacci number
= Ni-1 + Ni-2              // by definition
= (Ni-2 + Ni-3) + Ni-2     // unwrap Ni-1
= 2*Ni-2 + Ni-3            // reduce the equation
= 2*(Ni-3 + Ni-4) + Ni-3   //unwrap Ni-2
                           // And so on
= 3*Ni-3 + 2*Ni-4
= 5*Ni-4 + 3*Ni-5
= 8*Ni-5 + 5*Ni-6

= Nk*Ni-k + Nk-1*Ni-k-1

现在我们编写一个递归函数,其中每一步都采用 k~=I/2。

static long N(long i)
{
    if (i < 2) return 1;
    long k=i/2;
    return N(k) * N(i - k) + N(k - 1) * N(i - k - 1);
}

哪里出了问题?

最佳答案

您将得到该工作量的递归公式:T(n) = 4T(n/2) + O(1)。 (忽略数字变大的事实,因此 O(1) 甚至不成立)。由此可见,T(n) 不在 O(log(n)) 范围内。相反,我们可以通过主定理 T(n) 得到 O(n^2)。

顺便说一句,这比计算 n 以内的所有斐波那契数的简单算法还要慢。

关于fibonacci - 为什么这个斐波那契数函数在 O(log N) 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49161444/

相关文章:

c - 用户输入前 2 个数字的斐波那契数列

linux - bash脚本数组来内存斐波那契数列

java - Java 中计时器的 IndexOutOfBoundsException

c++ - 斐波那契函数无法正确计算

Java递归斐波那契值

python - 将 Python 算法翻译成 C++ 时遇到困难

c - 在 O(logn) 中找到第 n 个 fib 数

swift - 如何使用递归在 Swift Playground 中打印斐波那契数列

language-agnostic - 斐波那契 Code Golf

java - 将python斐波那契代码转换为java?