从求Fibonacci数的4个函数来分析大家的编程功底

从求 Fibonacci 数的 4 个函数来分析大家的编程功底
2011.10.17 by jack_incredible 
经典的 Fibonacci 问题,看了你就懂了 :) 
 
已知 f(n) = f(n-1) + f(n-2) ,f(0) = 0 ,f(1) = 1。 求 f(n) 
函数 1:  (大一时候的我写的程序大概就是这样一个面貌) 
long fib_r(int n) 

  if (n == 0) return(0); 
  if (n == 1) return(1); 
  return(fib_r(n-1) + fib_r(n-2)); 

函数 2:(大三或者大四的时候,估计我当时能写成这个样子就不错了) 
long fib_c(int n) 

  if (f[n] == UNKNOWN) 
    f[n] = fib_c(n-1) + fib_c(n-2); 
  return(f[n]); 

long fib_c_driver(int n) 

  int i; /* counter */ 
  f[0] = 0; 
  f[1] = 1; 
  for (i=2; i<=n; i++) f[i] = UNKNOWN;   return(fib_c(n)); 

函数 3:(现在的常规思维,能写成这个样子就不错了~) 
long fib_dp(int n) 

  int i; /* counter */ 
  long f[MAXN+1]; /* array to cache computed fib values */ 
  f[0] = 0; 
  f[1] = 1; 
  for (i=2; i<=n; i++) f[i] = f[i-1]+f[i-2]; 
  return(f[n]); 

函数 4: (对于经常做时间优化,空间优化的你,难道这种方法没想到吗?惭愧啊!!!!!!) 
long fib_ultimate(int n) 

  int i; /* counter */ 
  long back2=0, back1=1; /* last two values of f[n] */ 
  long next; /* placeholder for sum */ 
  if (n == 0) return (0); 
  for (i=2; i<n; i++) { 
    next = back1+back2; 
    back2 = back1; 
    back1 = next; 
  }   return(back1+back2); 


阅读更多
文章标签: 编程 优化 cache c
个人分类: 算法
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭