面试题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;
}

 

参考资料:

剑指offer第二版面试题10

posted @ 2018-08-06 19:36  朕蹲厕唱忐忑  阅读(207)  评论(0编辑  收藏  举报