标签:
递归:
学校里有个很长的楼梯,一共有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
标签:
原文地址:http://www.cnblogs.com/jack-xu/p/4818507.html