斐波那契数列的两种简单实现
2017-05-26 13:38
232 查看
近期一次面试,提到了斐波那契数列的实现,算法还是比较简单的,用了两种方法实现(两种方式写到了一个程序中),代码如下:
递归和数组方式,那个更好?简单说,递归方式的时间复杂度要高,算法可读性一般,数组方式时间复杂度O(n),易理解。在数据n很大的情况下,递归方式的性能很差
两种算法各有千秋。
如何设计测试用例对代码进行测试?数据0,1,2必须测试,另随机找几个整数。取n较大时查看算法占用的时间和资源。算法中使用了int做为存贮数值的结果,n较大时可能会造成溢出。
大致就是这些了,很长时间没有关注过基础算法,面试中提到了有没有更优化的算法,没有回答出来,发挥一般。
ps:还不知道什么是大名鼎鼎的斐波那契数列吗?如果是,那就搜索一下吧,有所耳闻,那就深度搜索一下其在各个方面的应用,很有意思的。
ps:增加时间跟踪函数发现,n在大于40以后,递归算法简直无法忍受,大概是函数调用开销实在是太大了。
另如果用int保存结果值,那么n=47时就溢出了,需要使用long但是到了一定的数量也会溢出。
#include "stdio.h" #include "stdlib.h" int fibonacci(int step) { if (step == 0) return 0; if (step == 1) return 1; return fibonacci(step-1)+fibonacci(step-2); } int main() { int n = 0; printf("Please Input the interger:\n"); scanf("%d", &n); //使用递归方式 int value = fibonacci(n); printf("Using Recursive, Fibonacci %d is %d\n", n, value); //使用常规数组方式 value =0; int a[2]={0}; a[0]=0; a[1] =1; if (n ==0) value=0; else if (n == 1) value = 1; else { for(int i =2; i <= n; i++) { value = a[1]+a[0]; a[0]=a[1]; a[1]=value; } } printf("Using Array, Fibonacci %d is %d\n", n, value); return 0; }面试过程中讨论如下:
递归和数组方式,那个更好?简单说,递归方式的时间复杂度要高,算法可读性一般,数组方式时间复杂度O(n),易理解。在数据n很大的情况下,递归方式的性能很差
两种算法各有千秋。
如何设计测试用例对代码进行测试?数据0,1,2必须测试,另随机找几个整数。取n较大时查看算法占用的时间和资源。算法中使用了int做为存贮数值的结果,n较大时可能会造成溢出。
大致就是这些了,很长时间没有关注过基础算法,面试中提到了有没有更优化的算法,没有回答出来,发挥一般。
ps:还不知道什么是大名鼎鼎的斐波那契数列吗?如果是,那就搜索一下吧,有所耳闻,那就深度搜索一下其在各个方面的应用,很有意思的。
ps:增加时间跟踪函数发现,n在大于40以后,递归算法简直无法忍受,大概是函数调用开销实在是太大了。
另如果用int保存结果值,那么n=47时就溢出了,需要使用long但是到了一定的数量也会溢出。
相关文章推荐
- 深入UNIX编程:一个简单聊天室的两种实现 (fcntl 和 select)
- 深入UNIX编程之一一个简单聊天室的两种实现 (fcntl 和 select)
- 用两种方式实现简单的隔行变色 用js实现
- 斐波那契数列的两种实现方式(递归(大于O(n方))和迭代(O(n))----网易笔试2013录
- Java 多线程的两种简单实现方法
- 用两种方法快速简单的实现窗口淡入淡出
- 两种思路用javascript实现实现简单的数字滚动动画
- 一个简单聊天室的两种实现 (fcntl 和 select)
- 简单标签实现foreach代码和jar打包的两种方法
- Java程序操作Oracle两种方式之简单实现
- 一个简单聊天室的两种实现 (fcntl 和 select)
- 杭电1076两种代码实现,一种方便理解一种实现简单
- 两种简单实现菜单高亮显示的JS类代码
- python超简单实现斐波那契数列
- 深入UNIX编程:一个简单聊天室的两种实现 (fcntl 和 select)-
- 一个简单聊天室的两种实现 (fcntl 和 select)(转)
- 两种简单实现菜单高亮显示的JS类代码
- 斐波那契数列实现的两种实现(表查询、向量)
- ListView之两种实现 简单例子
- 两种思路用javascript实现实现简单的数字滚动动画