JavaScript带你认识斐波那契数列

285 阅读3分钟

「这是我参与2022首次更文挑战的第12天,活动详情查看:2022首次更文挑战」。

简介

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

定义

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

题目

斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:

F(0) = 0,F(1) = 1 F(n) = F(n - 1) + F(n - 2),其中 n > 1 给定 n ,请计算 F(n) 。

题解

思路

想要解答这个问题,我们可以有两个方法:

1、递推法

由题目可以知道,斐波那契数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和,所以我们可以先初始化前两位数,再依次求两数之和递推求出第n为数。

/**
* @param {number} n
* @return {number}
*/ 
var fib = function(n) { 
    let a = 0,b = 1; 
    if(n == 0) return 0; 
    if(n == 1) return 1; 
    for(let i = 2; i <= n+1; i++){ 
        let c = a + b; 
        b = a; 
        a = c; 
    } 
    return a; 
};

2、递归法

由题目可以知道,斐波那契数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和,所以我们可以定义递归终结条件,n小于1时可以直接返回结果,不然则递归求前两数之和。

/**
* @param {number} n
* @return {number}
*/ 
var fib = function(n) {
    if(n == 1) return 1; 
    if(n == 0) return 0; 
    return fib(n-1) + fib(n-2); 
};

应用

  • 黄金分割
  • 杨辉三角
  • 矩形面积
  • 质数数量
  • 尾数循环