斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用。
简单来说就是有一个数列从第3项开始,每一项的值都会等于前2项的和,那如果让我们求第n项,虽然可以推算出来,但n特别大的时候还是很费时间的。所以今天用js的两种方法来解析这道题。
代码如下:
// 1.求斐波那契第n项的值 用递归的方法
var a =1; //相当与第n-2的值
var b =1; //相当与第n-1的值
var sum =1; //相当与前两项的和,也是n的值
function fn(n){
if(n<3){
sum =1;
}
for(i=3;i<=n;i++){
return fn(n-2)+fn(n-1)
}
return sum
}
console.log(fn(8))
//解析:设置一个函数当n小于3时会返回1,但是当n大于3时会调用自身使返回值为fn(n-2)和fn(n-1)的值,如果n-1和n-2依旧大于3,则继续调用函数直到实参为1或2才会返回1的值,最终结果也就是把fn(n)拆解为若干的fn(1)和fn(2)再求和。
//2. 不用递归的方法
var x =1; //相当与第n-2的值
var y =1; //相当与第n-1的值
var z =1; //相当与前两项的和,也是n的值
function fm(n){
if(n<3){
z =1;
}
for(i=3;i<=n;i++){
x=y;
y=z
z=x+y
}
return z
}
console.log(fm(8))
//这个看代码好理解,就是通过变量分别去接受n-1,n-2和他们之和,然后通过循环不断交换值,最后n的值等于n-1,n-2之和返回出来就行了。