Fibonacci 数列算法分析
/*************************************************
* Fibonacci 数列算法分析
*************************************************/
#include<iostream>
#include<stdio.h>
#include<vector>
#include<cmath>
#include<time.h>
using namespace std;
#define Time 1000000
#define N 15
#define Echo printf("result:%d | spend:%.3f\n",a,(((double)(clock()-start))/1000))
#define For for(int i=1; i<Time; ++i)
/*************************************************
Function: fibo1 fibo2 fibo3 fibo4
defferent: 1递归 2迭代 3向量 4公式
Description: 斐波那契数列求值
Return: 返回第N项的值
*************************************************/
int fibo1(int n) {
if(n==)return ;
if(n==)return ;
return fibo1(n-)+fibo1(n-);
}
int fibo2(int n) {
int a=,c;
for(int b=,i=; i<=n; ++i)
c=a+b,a=b,b=c;
return c;
}
int fibo3(int n) {
vector<int> v(n+,);
v[]=;
for(int i=; i<=n; ++i)
v[i]=v[i-]+v[i-];
return v[n];
}
int fibo4(int n) {
return (pow((+sqrt(5.0))/,n)-pow((-sqrt(5.0))/,n))/sqrt(5.0);
} int main() {
int a; clock_t start=clock();
For a=fibo1(N);
Echo; start=clock();
For a=fibo2(N);
Echo; start=clock();
For a=fibo3(N);
Echo; start=clock();
For a=fibo4(N);
Echo; return ;
}
循环次数 100000 ,N 为 10 结果如下

循环次数 100000 ,N 为 15 结果如下

-循环次数 100000 ,N 为 20 结果如下

可以看出递归最为耗时:代码简单易懂
向量由于做了大量的下标工作,相对来说次之
公式法再次之(在N=15时,公式法与迭代法性能不确定):公式推导,性能具有良好的稳定性
迭代最优:编程复杂,效率较高
以上只是针对本次测试
Fibonacci 数列算法分析的更多相关文章
- 2017.12.6 计算机算法分析与设计---------Fibonacci数列
(1)题目: 无穷数列1,1,2,3,5,8,13,21,34,55,--,称为Fibonacci数列.它可以递归地定义为: 第n个Fibonacci数可递归地计算如下: int fibonacci( ...
- 可变长度的Fibonacci数列
原题目: Write a recursive program that extends the range of the Fibonacci sequence. The Fibonacci sequ ...
- 入门训练 Fibonacci数列
入门训练 Fibonacci数列 时间限制:1.0s 内存限制:256.0MB 问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时, ...
- fibonacci 数列及其应用
fibonacci 数列及其延展 fibonacci计算 fibonacci数列是指 0,1,1,2,3,5,8,13,21……这样自然数序列,即从第3项开始满足f(n)=f(n-1)+f(n-2): ...
- 【编程题目】题目:定义 Fibonacci 数列 输入 n,用最快的方法求该数列的第 n 项。
第 19 题(数组.递归):题目:定义 Fibonacci 数列如下:/ 0 n=0f(n)= 1 n=1/ f(n-1)+f(n-2) n=2输入 n,用最快的方法求该数列的第 n 项. 思路:递归 ...
- 矩阵乘法快速幂 codevs 1732 Fibonacci数列 2
1732 Fibonacci数列 2 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 在“ ...
- 矩阵乘法快速幂 codevs 1250 Fibonacci数列
codevs 1250 Fibonacci数列 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 定义:f0=f1=1 ...
- 蓝桥杯 入门训练 Fibonacci数列(水题,斐波那契数列)
入门训练 Fibonacci数列 时间限制:1.0s 内存限制:256.0MB 问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非 ...
- 【wikioi】1250 Fibonacci数列(矩阵乘法)
http://wikioi.com/problem/1250/ 我就不说这题有多水了. 0 1 1 1 矩阵快速幂 #include <cstdio> #include <cstri ...
随机推荐
- 1 张图秒懂 Nova 16 种操作 - 每天5分钟玩转 OpenStack(44)
前面我们讨论了 Instance 的若干操作,有的操作功能比较类似,也有各自的适用场景,现在是时候系统地总结一下了. 如上图所示,我们把对 Instance 的管理按运维工作的场景分为两类:常规操作和 ...
- 2-3 Linux文件管理命令详解
1. 复制文件 cp: copy 格式 SRCFILE DEST 一个文件到一个文件 多个文件到一个目录 注,cd 后面什么都不加,是进入用户的家目录 如果目标文件不存在,则先创建文 ...
- linux fdisk命令使用
fdisk 对硬盘及分区的操作,进入fdisk 对硬盘操作阶段 我们可以对硬盘进行分区操作,前提是您把fdisk -l 弄明白了:通过fdisk -l ,我们能找出机器中所有硬盘个数及设备名称:比如上 ...
- android 实现点击listview 空白地方隐藏菜单
思路:重写ListView的setOnTouchListener事件: ListView.setOnTouchListener(new OnTouchListener(){ @Override pub ...
- Linux学习笔记1_用户和权限
自从我大微软终于放下身段,决定给开源社区一个迟来的拥抱,追随多年的拥趸们像是突然得到了女神的垂青,各种茫然失措.痛哭流涕.欢欣鼓舞,纷纷唱了起来:“等了好久终于等到今天,梦了好久终于把梦实现……”唱完 ...
- Linux 下系统调用的三种方法
系统调用(System Call)是操作系统为在用户态运行的进程与硬件设备(如CPU.磁盘.打印机等)进行交互提供的一组接口.当用户进程需要发生系统调用时,CPU 通过软中断切换到内核态开始执行内核系 ...
- Caffe源码解析2:SycedMem
转载请注明出处,楼燚(yì)航的blog,http://www.cnblogs.com/louyihang loves baiyan/ 看到SyncedMem就知道,这是在做内存同步的操作.这类个类的 ...
- 2016.10.30 NOIP模拟赛 day2 AM 整理
题目+数据:链接:http://pan.baidu.com/s/1gfBg4h1 密码:ho7o 总共得了:130分, 1:100分 2:30分(只会这30分的暴力) 3:0(毫无思路) 虽然不高, ...
- leetcode : Binary Tree Paths
Given a binary tree, return all root-to-leaf paths. For example, given the following binary tree: 1 ...
- sql left join on
select sysuser.userid, sysuser.groupid, sysuser.sysid, nvl( userjd.mc,nvl(useryy.m ...