【算法详解】斐波那契数列 - Fibonacci sequence
来源:互联网 发布:ecshop 打印sql语句 编辑:程序博客网 时间:2024/05/17 06:54
1. 斐波那契数列定义
在线测试工具: http://zh.numberempire.com/fibonaccinumbers.php
2. 算法
求解斐波那契数列的第n个数:
2.1 递归/分治法
#include <cstring>#include <iostream>using namespace std;unsigned long fabinacci(unsigned int n){if (n == 0){return 0;}elseif (n == 1){return 1;}else{return fabinacci(n - 2) + fabinacci(n - 1);}}int main() {unsigned int n = 0;cout<<"Please input a unsigned integer:"<<endl;cin>>n;cout<<"The "<<n<<"th fabonacci element is: "<<fabinacci(n);return 0;}
递归效率分析:
以计算f(10)为例:
从图中可以看出:要计算很多重复的之,计算重复值的数量随着N值而急剧增大。事实上该算法的时间复杂度随着n值呈指数增长 O((3/2)^n)。
2.2 迭代求解
循环求解:
#include <cstring>#include <iostream>using namespace std;long long fabinacci(unsigned int n){if (n == 0){return 0;}elseif (n == 1){return 1;}long long first = 0;long long second = 1;for (unsigned i = 1; i < n; i++){second = first + second;first = second - first;}return second;}int main() {unsigned int n = 0;cout<<"Please input a unsigned integer:"<<endl;cin>>n;cout<<"The "<<n<<"th fabonacci element is: "<<fabinacci(n);return 0;}
时间复杂度为:O(n);
2.3 通向求解
2.4 矩阵乘法 / 分治策略
推导:
#include <cstring>#include <iostream>using namespace std;void MatrixMulti(long long matrix[2][2],long long matrix2[2][2]){long long a = matrix[0][0] * matrix2[0][0] + matrix[0][1] * matrix2[1][0];long long b = matrix[0][0] * matrix2[0][1] + matrix[0][1] * matrix2[1][1];long long c = matrix[1][0] * matrix2[0][0] + matrix[1][1] * matrix2[1][0];long long d = matrix[1][0] * matrix2[0][1] + matrix[1][1] * matrix2[1][1];matrix[0][0] = a;matrix[0][1] = b;matrix[1][0] = c;matrix[1][1] = d;}long long fabinacci(int value){if(value == 0){return 0;}long long A[2][2] = {1,1,1,0};long long Matrix[2][2] = {1,0,1,0};int n = value - 1;for(; n ;n >>= 1){//oddif(n&1){MatrixMulti(Matrix,A);}MatrixMulti(A,A);}return Matrix[0][0];}int main() {unsigned int n = 0;cout<<"Please input a unsigned integer:"<<endl;cin>>n;cout<<"The "<<n<<"th fabonacci element is: "<<fabinacci(n);return 0;}
0 0
- 【算法详解】斐波那契数列 - Fibonacci sequence
- 斐波那契数列 Fibonacci sequence
- 斐波那契数列-Fibonacci Sequence
- 青蛙跳台阶问题,常见面试算法题,斐波那契数列(Fibonacci Sequence)
- 斐波那契数列(Fibonacci Sequence)
- 斐波那契数列 1133. Fibonacci Sequence
- 05_斐波那契数列(Fibonacci sequence)
- C++ 斐波那契数列(Fibonacci Sequence)
- 斐波那契数列(Fibonacci Sequence)
- python斐波那契数列集锦(Fibonacci sequence)
- 算法#02--斐波那契Fibonacci数列算法优化
- 斐波那契数列非递归算法(fibonacci)
- Fibonacci斐波那契数列面试与算法分析
- 斐波那契数列 fibonacci JavaScript算法
- 斐波那契数列三种算法(fibonacci)
- Java数据结构与算法---斐波那契数列Fibonacci
- 用递归实现斐波那契数列(Fibonacci Sequence )的函数
- HDU-A Fibonacci sequence斐波那契数列-大数求和
- 打印
- 解决Strict Standards: Only variables should be passed by reference
- Read Phone Number
- Java 范型实现原理
- Jquery.Treeview+Jquery UI制作Web文件预览
- 【算法详解】斐波那契数列 - Fibonacci sequence
- spring beandefinition
- Android菜鸟的成长笔记(9)——Intent与Intent Filter(下)
- (Android) Service
- c++读写文件
- 获得汉字字符串拼音首字母
- 好赞的早餐
- 重新规划
- static 与final的学习