首页 > 其他 > 详细

Fibonacci

时间:2015-09-18 11:37:18      阅读:194      评论:0      收藏:0      [点我收藏+]

递归:

学校里有个很长的楼梯,一共有n级台阶,一个同学要从第0级上到第n级,每一步只能上1级或2级,一共有多少种方法?

f(n)=f(n-1)+f(n-2)

int fib(n){return (2>n)?n:fib(n-1)+fib(n-2);}// 时间O(2^n)  空间o(n)

算67项需要10^5sec=1天,92项需要10^10sec=3century

低效的根源在于:各递归实例均被大量重复的调用

 

迭代改进:

方法A:记忆memoization

用一个表存储已计算出的递归实例,避免后面重复计算

方法B:动态规划

颠倒计算方向:由自顶向下递归,改为自底而上迭代

f=0;g=1;

while(0<n--)  {g=g+f;f=g-f;}

return g;//time: O(n);   space:  2

Fibonacci

原文:http://www.cnblogs.com/jack-xu/p/4818507.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!