为什么80%的码农都做不了架构师?>>>   

#include <iostream>
#include <cmath>
using namespace std;typedef unsigned int uint;/**
* 斐波那契数列:1、1、2、3、5、8、13、21、……如果设F(n)为该数列的第n项(n∈N+)。那么这句话可以写成如下形式:F(1) = 1,F(2)=1,F(n)=F(n-1)+F(n-2) (n≥3),显然这是一个线性递推数列。斐波那契数列通项公式F(n)=(√5/5)*{[(1+√5)/2]^n - [(1-√5)/2]^n}(√5表示根号5)。
*/uint fibonacci_seq_loop(uint n);
uint fibonacci_seq_noloop(uint n);uint fibonacci_seq_loop(uint n)
{if (n==1 or n==2)return 1U;elsereturn fibonacci_seq_loop(n-1)+fibonacci_seq_loop(n-2);
}uint fiboncci_seq_noloop(uint n)
{//F(n) = F(n-1) + F(n-2) (n>=3)//F(1) = F(2) = 1uint nRet;  // F(n)uint nP;    // F(n-1)uint nPp;   // F(n-2)nRet = nP = nPp = 1U;if(n==1 or n==2)return nRet;for(size_t i = 3; i <= n; i++){nRet = nP + nPp;nPp = nP;nP = nRet;}return nRet;
}uint fibonacci_format(uint n)
{return (uint)(sqrt(5.0)/5*( pow((1+sqrt(5.0))/2, n) - pow((1-sqrt(5.0))/2, n) ));
}int main()
{cout << "Fibonacci Sequence Generator" << endl;#if 10for(size_t n = 1; n < 100; n++)cout <<  n << '\t' << fiboncci_seq_noloop(n) << "\n";cout << endl;#endif#if 0for(size_t i = 1; i < 100; i++)cout << i << '\t' << fibonacci_format(i) << '\n';cout << endl;
#endifreturn 0;
}

分析3:最后介绍一种效率最高的算法O(logn),首先我们有下面的数学公式:

我们可以用数学归纳法证明如下:

Step1: n=2时

Step2:设n=k时,公式成立,则有:

等式两边同乘以[1,1;1,0]矩阵可得:

左=右,这正是n=k+1时的形式,即当n=k+1时等式成立。

由Step1和Step2可知,该数学公式成立。

由此可以知道该问题转化为计算右边矩阵的n-1幂问题。

我们利用分治的算法思想可以考虑如下求解一个数A的幂。

实现这种算法需要定义矩阵,以及矩阵的有关运算,具体代码如下:

#include<iostream>#include<string>using namespace std;//定义2×2矩阵;struct Matrix2by2{//构造函数Matrix2by2(long m_00,long m_01,long m_10,long m_11):m00(m_00),m01(m_01),m10(m_10),m11(m_11){}//数据成员long m00;long m01;long m10;long m11;};//定义2×2矩阵的乘法运算Matrix2by2 MatrixMultiply(const Matrix2by2& matrix1,const Matrix2by2& matrix2){Matrix2by2 matrix12(1,1,1,0);matrix12.m00 = matrix1.m00 * matrix2.m00 + matrix1.m01 * matrix2.m10;matrix12.m01 = matrix1.m00 * matrix2.m01 + matrix1.m01 * matrix2.m11;matrix12.m10 = matrix1.m10 * matrix2.m00 + matrix1.m11 * matrix2.m10;matrix12.m11 = matrix1.m10 * matrix2.m01 + matrix1.m11 * matrix2.m11;return matrix12;}//定义2×2矩阵的幂运算Matrix2by2 MatrixPower(unsigned int n){Matrix2by2 matrix(1,1,1,0);if(n == 1){matrix = Matrix2by2(1,1,1,0);}else if(n % 2 == 0){matrix = MatrixPower(n / 2);matrix = MatrixMultiply(matrix, matrix);}else if(n % 2 == 1){matrix = MatrixPower((n-1) / 2);matrix = MatrixMultiply(matrix, matrix);matrix = MatrixMultiply(matrix, Matrix2by2(1,1,1,0));}return matrix;}//计算Fibnacci的第n项long Fibonacci(unsigned int n){if(n == 0)return 0;if(n == 1)return 1;Matrix2by2 fibMatrix = MatrixPower(n-1);return fibMatrix.m00;}int main(){cout<<"Enter A Number:"<<endl;unsigned int number;cin>>number;cout<<Fibonacci(number)<<endl;return 0;}


转载于:https://my.oschina.net/qihh/blog/93720

斐波纳契数列(Fibonacci Sequence),又称黄金分割数列相关推荐

  1. 斐波纳契数列 python123

    def shulie(n):if n<=2:return 1else:return shulie(n-1)+shulie(n-2) n=int(input()) c=n for i in ran ...

  2. 斐波纳契数列(Fibonacci Sequence)

    斐波纳契数列(Fibonacci Sequence)  0.前言 很久以前就想写一些竞赛学习的总结,但是由于之前事情比较多,导致计划不断的减缓.现在,大学教学任务的考试已经全部结束了,而比赛也告一段落 ...

  3. 一文解决斐波那契数列求前n项和;和求第n个数是多少的问题;斐波那契数列(Fibonacci)又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……

    题目:斐波那契数列(Fibonacci)又称黄金分割数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.34.--在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)= 0,F(1) ...

  4. 斐波那契(Fibonacci,意大利数学家,1170年-1240年)数列,又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、……。这个数列从第三项开始,每一项都等于前两项之

    Problem Description 斐波那契(Fibonacci,意大利数学家,1170年-1240年)数列,又称黄金分割数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.--.这 ...

  5. [CS101] 转载:浅议Fibonacci(斐波纳契)数列求解

    原文转载自林健随笔的"浅议Fibonacci(斐波纳契)数列求解" Fibonacci 数列 描述了动物繁殖数量.植物花序变化等自然规律.作为一个经典的数学问题,Fibonacci ...

  6. Python - Python3 编程第一步 Fibonacci series: 斐波纳契数列

    Fibonacci series: 斐波纳契数列, 两个元素的总和确定了下一个数,例如:1 1 2 3 5 8 13 21 34 55 Python程序如下: def fibonacci1(n):a, ...

  7. 数学编程:经典数学编程案例之斐波那契:斐波那契数列的简介、代码实现、exe程序应用(斐波纳契时钟设计)之详细攻略

    数学编程:经典数学编程案例之斐波那契:斐波那契数列的简介.代码实现.exe程序应用(斐波纳契时钟设计)之详细攻略 目录 斐波那契数列的简介 斐波那契数列代码实现 1.python代码实现 2.Java ...

  8. Python编程实现——斐波纳契数列

    斐波纳契数列 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为"兔子数 ...

  9. AS3实现经典算法(一) 斐波纳契数列

    package{ /* 斐波纳契数列,又称黄金分割数列,指的是这样一个数列:1.1.2.3.5.8.13.21.--在数学上, 斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n- ...

  10. python3斐波纳契数列

    斐波那契数列,又称黄金分割数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.34.--在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1) ...

最新文章

  1. UBUNTU安装SSH和xrdp
  2. 如何用ipad制作精美的视频,并发布到视频网站
  3. 利用Jmeter测试CSRF令牌验证的Web API
  4. Server Tomcat v6.0 Server at localhost was unable to stat within 45 seconds
  5. Leetcode: Validate Binary Search Tree
  6. 华为ar2200路由器 策略路由_路由交换篇 06 华为路由器RIP协议的配置
  7. Requests库实战(四)---爬取肯德基餐厅地址信息
  8. 1.10 编程基础之简单排序 06 整数奇偶排序 python
  9. Google Adwords 关键字策略 – SEO数据搭配
  10. 超级终端设置-基本配置(华为)
  11. ERP已经凉凉?低代码平台真能成为下个风口吗?
  12. dedecms文章页面URL路径优化
  13. java获取当前行数
  14. asp.net实现页面无刷新效果
  15. 数据库存储 层次、树形结构 的标准做法
  16. 使用QPainter绘制饼状图,并显示所占百分比
  17. Unity 使用Mirror制作联机游戏
  18. 北大计算机系女神每天必看必学的IT公众号
  19. JVM规范(四)Frames
  20. 系统集成项目管理工程师笔记_备考常见英文词汇汇总

热门文章

  1. 计算机网络物联网论文,物联网技术及其应用_计算机网络论文.doc
  2. Mysql数据处理,按照半小时汇总数据,
  3. Who owns my data(2019/4/16)
  4. python 英文词语相似度 方法汇总
  5. squid 3 反向代理 缓存服务器 安装配置精华指南 by lbj
  6. Halcon轮廓提取
  7. 跟着团子学SAP EPPM: CPM主要底表
  8. android 相机编程,Android相机开发系列
  9. 微信内嵌H5网页 解决js倒计时失效
  10. uni-app升级方案