目录

1. 定义

2. 与黄金分割的关系

3. C#代码实现

4. Java代码实现

5. JavaScript代码实现

6. C++代码实现

基本循环算法

数组算法实现

递归算法实现

递归算法优化(记忆化搜索)

高精度计算

7. Python3代码实现

8. php代码实现

9. Rust代码实现


斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(≥ 2,∈ N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从 1963 年起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。

1. 定义

斐波那契数列指的是这样一个数列:1,1,2,3,5,8,13,21,34,55,89...

自然中的斐波那契数列

这个数列从第3项开始,每一项都等于前两项之和。

斐波那契数列的定义者,是意大利数学家莱昂纳多·斐波那契(Leonardo Fibonacci),生于公元1170年,卒于1250年,籍贯是比萨。他被人称作“比萨的莱昂纳多”。1202年,他撰写了《算盘全书》(Liber Abacci)一书。他是第一个研究了印度和阿拉伯数学理论的欧洲人。他的父亲被比萨的一家商业团体聘任为外交领事,派驻地点于阿尔及利亚地区,莱昂纳多因此得以在一个阿拉伯老师的指导下研究数学。他还曾在埃及、叙利亚、希腊、西西里和普罗旺斯等地研究数学。另外斐波纳契还在计算机C语言程序题中应用广泛

 2. 与黄金分割的关系

这样一个完全是自然数的数列,通项公式却是用无理数来表达的。而且当n趋向于无穷大时,前一项与后一项的比值越来越逼近黄金分割0.618(或者说后一项与前一项的比值小数部分越来越逼近 0.618)。

3. C#代码实现 

public static int GetiNum(int n) {long preVal = 1;long prePreVal = 0;if (n < 2)return n;long loop = 1;long returnVal = 0;while (loop < n) {returnVal = preVal + prePreVal;prePreVal = preVal;preVal = returnVal;loop++;}return returnVal;
}

4. Java代码实现 

//①==================================
/**
* 平推方法实现
*/
public static long fibLoop(int num) {if(num < 1 || num > 92)return 0;long a = 1;long b = 1;long temp;for(int i = 2; i < num; i++) {temp = a;a = b;b += temp;}return b;
}//②==================================
/**
* 递归方法实现
* f(n) = f(n - 1) + f(n - 2)
* 最高支持 n = 92 ,否则超出 Long.MAX_VALUE
* @param num n
* @return f(n)
*/
public static long fibRec(int num) {if(num < 1)return 0;if(num < 3)return 1;return fibRec(num - 1) + fibRec(num - 2);
}//③==================================
static long[] l = new long[93];
static {l[1] = 1;
}
/**
* 带有缓存的方法,比fibRec方法性能好很多
*/
public static long fibBuffRec(int num) {if(num < 1 || num > 92)return 0;if(l[num] == 0)l[num] = fibBuffRec(num - 1) + fibBuffRec(num - 2);return l[num];
}//④==================================
static List<BigDecimal> list = new ArrayList<BigDecimal>(93);
static {list.add(BigDecimal.ZERO);list.add(BigDecimal.ONE);
}
/**
* 1,2,3,4,5,6, 7 ,8
* 1,1,2,3,5,8,13,21
* 支持num超过92的超大型数字,使用了ArrayList进行缓存以提高性能
*/
public static BigDecimal fibBig(int num) {if(num < 0)return list.get(0);if (list.size() <= num)list.add(fibBig(num - 1).add(fibBig(num - 2)));return list.get(num);
}

5. JavaScript代码实现

//循环算法
function f(n){if(n == 0){return 0;}else if(n ==1){return 1;}else{var fn1 = 0;var fn2 = 1;var fnx = 0;for(var i=0;i<n-1; i++){var newfn1 = fn2;fnx = fn1 + fn2;fn1 = fn2;fn2 = fnx;}return fnx;}
}
//===============================
//递归算法
function fib(count) {
//参数判断var count = parseInt(count);if (isNaN(count) || count <= 0) {return 0;}function f(count) {if (count <= 2) {return 1;}return f(count - 1) + f(count - 2);}return f(count);
}

6. C++代码实现

基本循环算法 

#include<bits/stdc++.h>
using namespace std;
int main()
{int a=0,b=0,c=1,n;cin>>n;//输入nfor(int i=1;i<=n-1;i++){a=b;b=c;c=a+b;}cout<<c;//输出最终结果return 0;
}

数组算法实现

#include<iostream>
using namespace std;
int main()
{int a[30],i,n;cin>>n;a[1]=a[0]=1;for(i=2;i<n;i++){a[i]=a[i-2]+a[i-1];}cout<<a[n-1];return 0;
}

递归算法实现

#include<iostream>
using namespace std;
int f(int n)
{return (n<3)? 1 : f(n-1)+f(n-2);//如果是前两项,则输出1
}
int main()
{int n;cin>>n;cout<<f(n);return 0;
}

递归算法优化(记忆化搜索)

# include <bits/stdc++.h>
const int MAX=101;
using namespace std;
int a[MAX];
int f(int n)
{if(a[n]!=-1) return a[n];else
{a[n]=f(n-1)+f(n-2);return a[n];}
}
int main()
{int n;cin>>n;for(int i=0;i<=MAX-1;i++){//初始化 a[i]=-1;}a[0]=0;a[1]=1;cout<<f(n);return 0;
}

高精度计算

#include <bits/stdc++.h>
using namespace std;
char sum[1200];
int s=0,m=0,n;
int main()
{cin>>n;string s1,s2;int a[1200],b[1200];int he,i;s1="0";s2="1";for(m=2;m<n+1;m++){memset(a,0,sizeof a);memset(b,0,sizeof b);a[0]=s1.length();for(i=1;i<=a[0];i++){a[i]=s1[a[0]-i]-'0';}b[0]=s2.length();for(i=1;i<=b[0];i++){b[i]=s2[b[0]-i]-'0';}he=(a[0]>b[0]?a[0]:b[0]);for(i=1;i<=he;i++){a[i]+=b[i];a[i+1]+=a[i]/10;a[i]%=10;}he++;while((a[he]==0)&&(he>1))he--;for(i=he,s=0;i>=1;i--,s++){sum[s]=a[i]+'0';}s1=s2;s2=sum;}cout<<s2<<endl;return 0;
}

7. Python3代码实现

#输出在3000以内的斐波那契数列一、从最大值考虑numMax = int(input('please input  a maxnumber : '))def flibsOne(numMax):    c = []    a, b = 0, 1    while a < numMax: a, b = b, a + b        c.append(a)    c.remove(c[-1])    print(c)二、从位数考虑num = int(input('please input  a number : '))def flibsTwo(num):    list1 = []    for i in range(num):        if i <=1:list1.append(1)else:    list1.append(list1[-2] + list1[-1])return list1    print(flibsTwo(num)) #输出num位数列第三种,根据f(n)= f(n-1)+f(n-2)实现
Fbs = [1,1]#斐波那契数列前两位
n = 3
s = input("Maxmun ")#输入最大次数
while n != (int(s)+1) :#因为差一原则所以要再加一a = Fbs[-1]b = Fbs[-2]fb = a+bprint(str(n)+" "+str(fb))n = n +1Fbs.append(fb)

8. php代码实现

// 动态规划解斐波那契数列
function fibRec(int $n)
{if ($n == 0) {return $n;}$a1 = 0;$a2 = 1;for ($i = 1; $i < $n; $i++) {[$a1, $a2] = [$a2, $a1 + $a2];        }return $a2;
}

9. Rust代码实现

// Rust代码实现fn main() {println!("{} {} {} {} {}", fib(0), fib(1), fib(2), fib(3), fib(4));
}fn fib(d: i32) -> i32 {if d == 0 || d == 1 {d} else {ficc(d - 2) + ficc(d - 1)}
}

斐波那契数列(各种代码实现斐波那契数列)相关推荐

  1. 斐波那契数列c++代码_轮到你了,斐波那契数列!

    前阵子,日剧"轮到你了"终于大结局了,虽然结局有点一言难尽,但黑岛和二阶堂两个学霸之间的爱情,还是很甜呢呐!两个学霸之间的默契的斐波那契数列也被许多网友认为是凶手行凶的依据.到底这 ...

  2. 从斐波那契数列谈谈代码的性能优化

    根据高德纳(Donald Ervin Knuth)的<计算机程序设计艺术>(The Art of Computer Programming), 1150年印度数学家Gopala和金月在研究 ...

  3. 【Matlab代码】斐波拉契数列

    实验1:显示数列的函数类型 function fib1(n)%显示数列前n项 fn=[1,1];%将前两项放到数组fn中 for i=3:nfn=[fn,fn(i-2)+fn(i-1)];%将第i项添 ...

  4. 斐波那契回调线怎么画_斐波那契回调线的口诀-斐波那契数列k线图解。

    斐波那契回调线 斐波那契数列的通项公式? 斐波那契数列的求和公式?有么 求教1.斐波那契回调线的高点和低点怎样确定比较好?在多大的一个区间内确定. 新人提问:您知道斐波那契回调线的正确方法吗? 选择股 ...

  5. matlab实现鬼波信号压制算法(附鬼波算法压制工具包)  代码实践--第一篇 频率-空间域自适应鬼波压制

    matlab实现鬼波信号压制算法(附鬼波算法压制工具包)  代码实践 涵盖了频率-空间域.频率-波数域.拉东域鬼波压制算法     建议实践之前熟练掌握各个域鬼波压制方法的原理,才能对代码有更深入的了 ...

  6. iir陷波滤波器 matlab,IIR数字滤波器设计50Hz陷波器(MATLAB代码)

    %% IIR陷波器设计 % 目的:设计一个陷波器阻带在50±1.5Hz以内,采样频率为400Hz的滤波器, % 并要求通带最大衰减为0.1dB,阻带最小衰减为60dB. clc; clear;clos ...

  7. Java黑皮书课后题第5章:*5.24(数列求和)编写程序,计算下面数列的和:1/3+3/5+5/7+7/9+……95/97+97/99

    5.24(数列求和)编写程序,计算下面数列的和:1/3+3/5+5/7+7/9+--95/97+97/99 题目 题目概述 破题 代码 运行示例 题目 题目概述 5.24(数列求和)编写程序,计算下面 ...

  8. 一维信号小波阈值去噪 c语言,一维信号小波阈值去噪

    描述 1.小波阈值处理基本理论 所谓阈值去噪简而言之就是对信号进行分解,然后对分解后的系数进行阈值处理,最后重构得到去噪信号.该算法其主要理论依据是:小波变换具有很强的去数据相关性,它能够使信号的能量 ...

  9. 练习-任意输入n个从小到大的整数的数列,然后输入一个整数插入到数列中,使数列保持从小到大的顺序

    第1关:任意输入n个从小到大的整数的数列,然后输入一个整数插入到数列中,使数列保持从小到大的顺序 任务描述 本关任务:任意输入n个从小到大的整数,然后输入一个整数插入到数组中,使数组元素仍然保持从小到 ...

  10. 心电图前波过多_心电图写着:T波倒置,就是心肌缺血吗?医生:不能如此草率...

    心电图是我们医生,尤其心内科医生最重要的帮手之一,甚至可以说没有心电图我们寸步难行. 无论我们常规体检,还是因为别的原因看病,大部分时间都会让我们做一份心电图,因为心电图简单方便,能反应心律失常.心肌 ...

最新文章

  1. EmbeddedWebBrowser(EmbeddedWB)不显示图片
  2. 用python编程、假设一年期定期利率_python,练习题网站.doc
  3. 湖南大学计算机与通信学院研究生,湖南大学计算机与通信学院2010年硕士研究生招生学科...
  4. pycharm新项目加载库的方法
  5. 程序员讨厌领导又不想辞职,用一妙招让领导离职,网友:佩服
  6. python与txt文件查找,在Python中搜索TXT文件
  7. struct结构体指定初始化项目
  8. dbutils使用---QueryRunner(query_update)、BeanList\BeanHandler、MapList\MapHandler、ScalarHandler...
  9. 中文文本标注工具调研以及BRAT安装使用
  10. ectouch java_ectouch: 包含 ECTouch_v2.7.2_SC_UTF8 ECshop_v3.6.0_UTF8_release ECShop_V4.0.0_UTF8
  11. 【新模板推荐】目标军令状、假期通知书…签名确认仪式满满
  12. 人际交往心理学 读后感
  13. 中考计算机易错知识点,中考语文常见的易错考点23个
  14. C#加载本地相对路径HTML页面
  15. IPv6技术详解:基本概念、应用现状、技术实践(上篇)
  16. access字段相加_access如何对一行的几列求和
  17. 硬件产品经理 硬件职业理解 第二弹
  18. FCKEditor 的使用
  19. 下载安装IDM Integration Module和其使用方法
  20. java 中的class类_Java中Class类简介

热门文章

  1. 5.1.2全景声音箱摆位_5.1.2全景声系统私人家庭影院设计方案
  2. 程序员懒人投资大法之定投指数基金
  3. QQ快速登录的实现原理
  4. 杨勇博客之家-博客文章导航
  5. arm怎么运行python_给arm板编译移植python(一)
  6. 2017年小米春招内推面试面经
  7. 北京双线机房的优缺点分析
  8. 四叉树与八叉树原理 / AABB OBB / 碰撞检测优化
  9. 现代投资组合理论python实现
  10. 对马科维兹投资组合理论的总结