斐波那契数列
来源:互联网 发布:oracle启动数据库主页 编辑:程序博客网 时间:2024/05/29 14:04
f(n) = f(n -1) + f(n-2)
f(0) = 0;
f(1) = 1;
通常问题是求最快的计算方法:1、循环;2求通项公式;3其他
相关问题:上楼有两种上法,每次上一级或每次上量级,问如果楼梯有n级总共有多少种上楼方法
考察上到第n曾楼梯的方法有两种,一种是从n-1层上来,还有一种是从n-2层上来,因此到n层的方法是f(n) = f(n-1) + f(n-2)
下面给出递归和循环的程序:
#include <stdio.h>#include <boost/scoped_ptr.hpp>#include <sys/time.h>unsigned int Fibonacci(int value) { if (value == 0) { return 0; } else if (value == 1) { return 1; } else { return Fibonacci(value -1) + Fibonacci(value - 2); }}unsigned int Fibonacci_1(unsigned int value) { if (value < 0) { return -1; } boost::scoped_ptr<unsigned int> fibonacci_buffer(new unsigned int[value + 1]); unsigned int* fibonacci = fibonacci_buffer.get(); fibonacci[0] = 0; fibonacci[1] = 1; for (int i = 2; i <= value; ++i) { fibonacci[i] = fibonacci[i - 1] + fibonacci[i - 2]; } return fibonacci[value];}int GetTime() { timeval tv; gettimeofday(&tv, NULL); return tv.tv_sec * 1000000 + tv.tv_usec;}int main(int argc, char** argv) { int start; start = GetTime(); printf("algorithm1 recursive %d\n",Fibonacci(45)); printf("time elapse:%d\n", GetTime() - start); start = GetTime(); printf("algorithm2 loop %d\n", Fibonacci_1(45)); printf("time elapse:%d\n", GetTime() - start);}--------------------------------result-------------------------./a.out algorithm1 recursive 1134903170time elapse:24385020algorithm2 loop 1134903170time elapse:56
从实验结果看,循环的效率要远远高于递归的效率。
参考文献:
编程之美2.9
百度百科http://baike.baidu.com/view/816.htm
- 斐波那契数列数列计算
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- arm_linux 交叉编译环境配置
- jvm详解-gc策略
- Linux虚拟文件系统之文件读取(sys_read())
- 谈谈struts2的工作原理
- ubuntu忘记密码,忘记root密码的解决方法
- 斐波那契数列
- spring mvc 分页
- zwCreateProcess获得目标进程名
- CSMA/CA(多路访问/冲突避免)
- funshioncharts中Xml配置参数说明
- upplemental Logging
- asp.net中viewState的应用
- C语言常见错误
- cygwin+linux+GNU工具命令