来自网易的一道看似简单的笔试题
题目:要求以线性时间复杂度实现斐波那契数列。
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 。。。。。。
众所周知的斐波那契实现方式为递归实现:
int feb1(int n) { t1++; if(n == 0 || n == 1) return 1; return feb1(n-1) + feb1(n-2); }
当n=25时, 迭代次数为242785 。
关于其复杂度的解释比较麻烦,详见 http://www.cnblogs.com/python27/archive/2011/12/09/2282486.html
至今看了公开课视频后,才有所感悟,采用动态规划后,其复杂度直接下降到线性,迭代次数为49 。
int a[1000] = {0}; int feb2(int n) { t2++; if(n == 0 || n == 1) return 1; if(a[n] != 0) return a[n]; else a[n] = feb2(n-1) + feb2(n-2); return a[n]; }