从求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); 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值