面试题10:斐波那契数列

面试题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 朕蹲厕唱忐忑 阅读( ...) 评论( ...) 编辑 收藏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值