「这是我参与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);
};
应用
- 黄金分割
- 杨辉三角
- 矩形面积
- 质数数量
- 尾数循环