这个Fibonacci函数有什么问题?

Ego*_*hin 6 c fibonacci

在博客文章中偶然发现了这个糟糕的C++代码示例,没有任何解释为什么它被认为是"坏".我有自己的想法,但我想听听有经验的C++开发人员.

unsigned int Fibonacci (unsigned int n)
{
    if (n == 0 || n == 1)
        return n;
    else
        return Fibonacci (n - 1U) + Fibonacci (n - 2U);
}
Run Code Online (Sandbox Code Playgroud)

Aar*_*otz 7

也许是因为它以指数时间运行?

  • 这个特定方法的代码行太多了:`return(n <2)?n:Fibonacci(n-1U)+ Fibonacci(n-2U);`另一方面,封闭形式方程的主要问题是它可能导致浮点错误. (2认同)

Ste*_*ang 7

详细说明上面的陈述:既然你没有记忆,你就会在第一次调用时产生2个进程,每个进程产生两个进程,依此类推,直到你遇到基本情况.

避免这种情况的三种方法:1)记忆,2)迭代地进行,或3)对Fibonacci序列使用闭合形式方程.:d