这个C++代码有什么问题

nix*_*get 0 c++

如果下面的代码有问题,有人可以告诉我吗...在一个问题中,我被问到以下斐波纳契数函数是否有问题.

int fib(int n)
{
  if (n <= 1) return n;
  return fib (n-1) + fib(n-2);
}
Run Code Online (Sandbox Code Playgroud)

其中n是0 ... 100

所以我的回答是什么,因为我看不到任何明显的东西.语法似乎很好,逻辑上这是计算斐波那契数.我在做出这个假设时是否正确?

awe*_*oon 7

这取决于您询问的问题类型.我在这里看到两个问题:

  • 递归.没有理由.只需使用迭代.
  • 范围溢出.int类型不能保持范围[0,100]内的所有斐波纳契数

这是在Python中使用迭代的fib实现的一个例子(仅仅因为它可以保持fib(100)开箱即用):

In [16]: def fib(n):
   ....:     curr, next = 0, 1
   ....:     for x in range(n):
   ....:         curr, next = next, curr
   ....:         next += curr
   ....:     return curr
   ....: 

In [17]: fib(100)
Out[17]: 354224848179261915075L
Run Code Online (Sandbox Code Playgroud)