9.求斐波那契Fibonacci数列通项

(1)递归实现:

#include<iostream>
using namespace std;
int Fibonacci(int);

int main()
{
    int n;
    cout<<"please input an number n: "<<endl;
    cin>>n;

for(int i=1;i<=n;i++)
    {
        cout<<Fibonacci(i)<<endl;
    }
    return 0;
}

int Fibonacci(int n)//运用递归求斐波那契数列
{
    if(n<3)
    {
        return 1;
    }else
    {
        return Fibonacci(n-1)+Fibonacci(n-2);
    }

}

(2)数组实现:明显感觉数组效率要高很多

#include<iostream>
using namespace std;
int Fibonacci(int);

int main()
{
    int n;
    cout<<"please input an number: "<<endl;
    cin>>n;
    cout<<Fibonacci(n);
    return 0;
}

int Fibonacci(int n)
{
    if(n<1)
    {
        return -1;
    }
    if(n<3)
    {
        return 1;
    }
    int *a=new int[n];//开辟一块内存空间
    a[0]=a[1]=1;
    for(int i=2;i<n;i++)
    {
        a[i]=a[i-1]+a[i-2];
    }
    for(int j=0;j<n;j++)//输出所求数组
    {
        cout<<a[j]<<endl;
    }

}

(3)运用向量:

#include<iostream>
#include<vector>//使用向量须声明
using namespace std;
int Fibonacci(int);

int main()
{
    int n;
    cout<<"please input an number: "<<endl;
    cin>>n;

cout<<Fibonacci(n)<<endl;

return 0;
}

int Fibonacci(int index)           //借用vector<int>实现
{
 if(index<1)
 {
  return -1;
 }
 vector<int> a(2,1);      //创建一个含有2个元素都为1的向量
 a.reserve(3);//reserve(size)为当前vector预留至少共容纳size个元素的空间
 for(int i=2;i<index;i++)
 {
  a.insert(a.begin(),a.at(0)+a.at(1));
  a.pop_back();//pop_back()函数删除当前vector最末的一个元素
 }
 return a.at(0);//at() 函数 返回当前Vector指定位置loc的元素的引用

}

(4)使用队列:

#include<iostream>
#include<queue>//使用队列须声明
using namespace std;
int Fibonacci(int);

int main()
{
    int n;
    cout<<"please input an number: "<<endl;
    cin>>n;

cout<<Fibonacci(n)<<endl;

return 0;
}

int Fibonacci(int index)       //队列实现
{
 if(index<1)
 {
  return -1;
 }
 queue<int>q;
 q.push(1);
 q.push(1);
 for(int i=2;i<index;i++)
 {
  q.push(q.front()+q.back());
  q.pop();
 }
 return q.back();

}

(5)迭代法:

#include<iostream>
using namespace std;
int Fibonacci(int);

int main()
{
    int n;
    cout<<"please input an number: "<<endl;
    cin>>n;

cout<<Fibonacci(n)<<endl;

return 0;
}

int Fibonacci(int n)       //队列实现
{
 int i,a=1,b=1,c=1;
 if(n<1)
 {
  return -1;
 }
 for(i=2;i<n;i++)
 {
  c=a+b;     //辗转相加法(类似于求最大公约数的辗转相除法)
  a=b;
  b=c;
 }
 return c;

}

(6)二分矩阵方法(我自己还不怎么懂。。。)?

9.求斐波那契Fibonacci数列通项

时间: 2024-08-03 06:18:35

9.求斐波那契Fibonacci数列通项的相关文章

【C语言】求斐波那契(Fibonacci)数列通项(递归法、非递归法)

意大利的数学家列昂那多·斐波那契在1202年研究兔子产崽问题时发现了此数列.设一对大兔子每月生一对小兔子,每对新生兔在出生一个月后又下崽,假若兔子都不死亡.   问:一对兔子,一年能繁殖成多少对兔子?题中本质上有两类兔子:一类是能生殖的兔子,简称为大兔子:新生的兔子不能生殖,简称为小兔子:小兔子一个月就长成大兔子.求的是大兔子与小兔子的总和. 月     份  ⅠⅡ  Ⅲ  Ⅳ  Ⅴ Ⅵ  Ⅶ  Ⅷ Ⅸ Ⅹ  Ⅺ  Ⅻ大兔对数 1  1   2   3   5  8  13  21 34 55 

编程之美 2.9 斐波那契(Fibonacci)数列

编程之美 2.9 斐波那契(Fibonacci)数列 斐波那契的递归表达式如下 F(n)=F(n-1)+F(n-2) n>=2 F(1)=1 F(0)=0 书中提到了三中解决方法 第一种:直接运用递归的方法来进行求解 package org.wrh.programbeautiful; import java.util.Scanner; public class Topic2_9 { public static void main(String[] args) { Topic2_9 t=new T

【编程之美】斐波那契(Fibonacci)数列

斐波那契数列是一个非常美丽.和谐的数列,有人说它起源于一对繁殖力惊人.基因非常优秀的兔子,也有人说远古时期的鹦鹉就知道这个规律. 每一个学理工科的学生都知道斐波那契数列,斐波那契数列由如下递推关系式定义: F(0)=0, F(1)=1, n>1时,F(n)=F(n-1)+F(n-2). 每一个上过算法课的同学都能用递归的方法求解斐波那契数列的第n+1项的值,即F(n). 1 int Fibonacci(int n) 2 { 3 if (n <= 0) return 0; 4 else if (

斐波那契 [ Fibonacci] 数列之大整数求和

之前做到一题, 不过由于Honor Code的缘故就不说是啥了, 很多人都知道 (-_-) 大概是说有n个牌,每个牌只有A,B两种状态. 当出现连续3个牌的状态一样时,认为不完美. 给出一个[1, 10000]的整数, 让求出完美的排列个数 那么我们就可以分析一下: /*-------------------------------------------------------------------------------分析:    首先要求出不美观的个数,但是尝试可以发现美观的排列更容易

斐波那契 (Fibonacci)数列

尾递归会将本次方法的结果计算出来,直接传递给下个方法.效率很快. 一般的递归,在本次方法结果还没出来的时候,就调用了下次的递归, 而程序就要将部分的结果保存在内存中,直到后面的方法结束,再返回来计算.如果递归比较大,可能会照成内存溢出. 实践证明,尾递归 ,确实比普通递归效率高. 下面的例子 ,用 普通递归需要10s完成 , 而用尾递归,只用了1s不到 package com.zf.dg; /** * 题目 * 有一种母牛,出生后第三年,开始生育,每年都生一头 母牛(貌似单性生育,这里就没公牛什

如何用Python输出一个斐波那契Fibonacci数列

a,b = 0, 1 while b<100: print (b), a, b = b, a+b 原文地址:https://www.cnblogs.com/apollo1616/p/9776116.html

利用矩阵求斐波那契数列

利用矩阵求斐波那契数列 flyfish 2015-8-27 矩阵(matrix)定义 一个m*n的矩阵是一个由m行n列元素排成的矩形阵列.矩阵里的元素可以是数字符号或者数学式. 形如 {acbd} 的数表称为二阶矩阵,它由二行二列组成,其中a,b,c,d称为这个矩阵的元素. 形如 {x1x2} 的有序对称为列向量Column vector 设 A={acbd} X={x1x2} 则 Y={ax1+bx2cx1+dx2} 称为二阶矩阵A与平面向量X的乘积,记为AX=Y 斐波那契(Fibonacci

hdu1568&amp;&amp;hdu3117 求斐波那契数前四位和后四位

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1568 题意:如标题所示,求斐波那契数前四位,不足四位直接输出答案 斐波那契数列通式: 当n<=20的时候,不足四位,所以直接打表. 当n>20的时候,大于四位的时候,ans满足这个公式:ans=-0.5*log10(5.0)+num*1.0*log10((1+sqrt(5.0))/2.0); 这个公式是怎么来的呢?我们可以对an取10的对数,根据对数的性质. log10(ans)=log10(1/

poj 3070 Fibonacci (矩阵快速幂求斐波那契数列的第n项)

题意就是用矩阵乘法来求斐波那契数列的第n项的后四位数.如果后四位全为0,则输出0,否则 输出后四位去掉前导0,也...就...是...说...输出Fn%10000. 题目说的如此清楚..我居然还在%和/来找后四位还判断是不是全为0还输出时判断是否为0然后 去掉前导0.o(╯□╰)o 还有矩阵快速幂的幂是0时要特判. P.S:今天下午就想好今天学一下矩阵乘法方面的知识,这题是我的第一道正式接触矩阵乘法的题,欧耶! #include<cstdio> #include<iostream>