面试-斐波那契数列

在C语言或者C++的面试中,斐波那契数列是个比较常见的题目

常见的解法 是递归

long FBNQ_DG(unsigned long n)
{
	return n <= 2?1:(PBNQ_DG(n-1)+PBNQ_DG(n-2));
}


然后面试官会让你考虑一种新的方法去写

另一种解法是循环

long FBNQ_FDG(unsigned long n)
{
	long result;
	if (n <= 2)
	{
		return 1;
	}
	int last1 = 1,last2 = 1;
	for (int i = 0;i < n-2;i++)
	{
		result = last2 + last1;
		last2 = last1;
		last1 = result;
	}
	return result;
}
接下来,面试官会让你比较这两种方法的效率

一般的回答是,循环的效率更高,递归会导致多次进行重复的计算。举个例子:

f(7) = f(6) + f(5) = f(5) + f(4) + f(4)+ f(3)  = f(4) + f(3) + f(3) + f(2) + f(3) + f(2) + f(2) +f(1)

写道这里就不难发现f(2),f(3)计算了多次,而循环采用中间变量保存上一次计算结果,所以效率较高

这里面试官可能还会问你这样写会不会有什么问题

接下来就要考虑类型溢出的问题,因为不管是int 还是long,都是有取值范围的,如果数值过大会导致溢出。

关于大数的问题,本文不做详细解释,想要知道的同学自行搜索


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值