来自网易的一道看似简单的笔试题
题目:要求以线性时间复杂度实现斐波那契数列。
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];
}
本文详细介绍了如何通过动态规划优化斐波那契数列的递归实现,显著降低了迭代次数,从242785减少至49次。通过对比传统的递归方法和动态规划方法,阐述了动态规划的优势,并提供了优化后的代码实现。
705

被折叠的 条评论
为什么被折叠?



