面试题10:斐波那契数列
// 面试题10:斐波那契数列
// 题目:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项。
解题思路:
Fibonacci数列,不用多说,相信大家都了解,f(0)=0,f(1)=1,f(n)=f(n-1)+f(n-2)(n>=2)。
看着斐波拉契数列,突然想到了一句话很贴切,道生一,一生二,二生三,三生万物...
斐波拉契最简单的写法就是递归,函数简介易懂,但是由于执行过程中需要不断的调用自身,时间复杂度比较高,
而且使用递归的话,会有大量重复不必要的计算产生,我们可以使用迭代来改写递归,提高运行效率。
这个东西以前算法课应该讲过的,好像当初还讲了第三种方法,就是利用矩阵来求,剑指offer里面也讲到了,先这样吧。
伪代码:
略
c/c++:
long long Fibonacci_Solution1(unsigned n) { if (n<= 0) return 0; if (n == 1) return 1; if (n > 1) return Fibonacci_Solution1(n - 1) + Fibonacci_Solution1(n - 2); } long long Fibonacci_Solution2(unsigned n) { int a[2] = { 0,1 }; if (n < 2) return a[n]; long long fibOne = 0; long long fibTwo = 1; long long fibN = 0; for (int i = 2; i <= n; i++) { fibN = fibOne + fibTwo; fibOne = fibTwo; fibTwo = fibN; } return fibN; }