码迷,mamicode.com
首页 > 其他好文 > 详细

Fibonacci

时间:2015-09-18 11:37:31      阅读:122      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!