斐波那契数列的两种简单实现
来源:互联网 发布:怎么提高英语听力知乎 编辑:程序博客网 时间:2024/05/19 19:44
近期一次面试,提到了斐波那契数列的实现,算法还是比较简单的,用了两种方法实现(两种方式写到了一个程序中),代码如下:
#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但是到了一定的数量也会溢出。
阅读全文
0 0
- 斐波那契数列的两种简单实现
- 斐波那契数列的两种实现方式
- 斐波那契数列的两种实现形式
- 斐波那契数列的两种实现方法
- 斐波那契数列的两种实现方法
- 斐波那契数列的两种实现
- 斐波那契数列的两种实现呢
- java实现斐波那契数列两种写法
- 斐波那契数列实现的两种实现(表查询、向量)
- java 实现最简单的斐波那契数列
- “斐波那契数列”的两种算法
- “斐波那契数列”的两种算法
- 斐波那契数列的两种表达方式
- “斐波那契数列”的两种算法
- C语言实现斐波那契数列的两种方法(递归和迭代)
- 简单的斐波那契数列
- 斐波那契数列的四种简单实现方式
- 斐波那契数列的实现
- 数据类型
- 在企业级SaaS市场全面爆发中占领市场
- 学习三十四天笔记——mysql事务触发器函数过程:变量
- Smart Autocomplete智能提示介绍
- Oracle Grid Infrastructure安装
- 斐波那契数列的两种简单实现
- 随笔
- java线程笔记
- lua cocos 创建动画的几种方式
- 冒泡排序总结
- UITableView侧滑多个按钮
- bzoj2091
- C++11 lambda表达式 原理
- Tomcat自带log的配置