面试-斐波那契数列

来源:互联网 发布:error 1130 mysql 编辑:程序博客网 时间:2024/06/06 01:41

在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,都是有取值范围的,如果数值过大会导致溢出。

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


1 0
原创粉丝点击