[关闭]
@haoqiang 2018-03-01T11:37:21.000000Z 字数 288 阅读 36

斐波那契数列

算法


二分递归:时O(2^n),空O(1)

  1. int fib(int n) {
  2. return n < 2 ? n : fib(n - 1) + fib(n - 2);
  3. }

线性递归:时O(n),空O(n)

  1. int fib(int n, int& prev) {
  2. if (n == 0) {
  3. prev = 1; //fib(-1)=1,fib(0)=0
  4. return 0;
  5. }
  6. else {
  7. int prevprev;
  8. prev = fib(n - 1, prevprev);
  9. return prev + prevprev;
  10. }
  11. }

迭代:时O(n),空O(1)

  1. int fib(int n) {
  2. int f = 1, g = 0;
  3. while (n-- > 0) {
  4. g = g + f;
  5. f = g - f;
  6. }
  7. return g;
  8. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注