面试题 9,斐波那契数列

最简单的递归自然不会成为答案的采纳对象。
我的第一思路是使用数组记录递归,这也是当递归出现重复计算的时候的一般思路。完整代码如下,已调试。
#include <stdlib.h> #include <stdio.h> using namespace std; int calculate(int n, int *list){ if(list[n] > 0 || n == 0) return list[n]; else{ list[n] = calculate(n-1, list) + calculate(n-2, list); return list[n]; } } int FebonacciResult(const int size){ int *rec = new int[size]; for(int i = 0;i < size;i++) rec[i] = 0; rec[0] = 0; rec[1] = 1; return calculate(size-1, rec); } int main(){ int size = 0; scanf("%d", &size); int result = FebonacciResult(size); printf("%d\n", result); return 0; }
答案中的代码更加简洁也没有使用额外的空间,直接使用for循环来实现。

这两种的解法的时间复杂度均为O(N)
还有时间复杂度为O(logN)的方法,需要用到的公式和解释如下:

------------------------------------------------
Felix原创,转载请注明出处,感谢博客园!
posted on 2013-11-28 20:24 Felix Fang 阅读(133) 评论(0) 收藏 举报
浙公网安备 33010602011771号