用js解决斐波那契数列
这个数列是个啥?
举个例子: 1、1、2、3、5、8、13、21、34、……
发现规律了吗?
前俩个都是1,从第三个开始前俩项的和等于第三项的值,比如 第三项是2,就是1+1=2,第5项是5,就是2+3=5…
讲这个数列之前需要让大家了解一下交换变量,简单理解;有俩个杯子,1号杯子放的是水,2号杯子里放的是茶,
现在想让一号杯子里放茶,二号杯子里放水,请问你如何来做?
当然很简单,再找3号一个杯子,先将1倒入3号杯子,再将2倒入一号杯子,最后将3号杯子倒入2号杯子.
图解:
下面进入正题:
从第三项开始,要想知道某一项的值,就必须知道该项前俩项的值.我们让n1 和n2 每次都向右移动,
这样就可以求出该项的值,由图可以看出,n1是上一次n2的值,n2又是上一次n1+n2的值。如此循环便可得出答案。
逻辑清晰了我们来书写代码
function fib(n){
let n1=1,n2=1;
for(let i=3;i<=n;i++){
let c=n1; // 申明变量来保存n1,也就是相当于第三个杯子
n1=n2;
n2=c+n2;
}
return n2 //将最终结果返回
}
fib(5) //----->5
用递归来完成
要写递归要有俩个必要条件,基层条件和递归条件。
基层条件:问题可分为的最小条件,满足则退出。
递归条件:将问题连续分解的条件。
递归简单来说就是在函数内自己调用自己。
function fib(n){
if(n==1||n==2) return 1; //基层条件
return fib(n-1)+fib(n-2) //该项的值等于前俩项的和,递归条件
}
fib(4) //3
可以这样来理解fib(4)
fib(4)–>fib(3)+fib(2)
fib(3)–>fib(2)+fib(1)
fib(2)=fib(1)=1
所以fib(4)=1+1+1=3
到这里就是我分享的用JavaScript来解决斐波那契数列的问题,当然解决方法还有好多欢迎大家留言告诉我,如果还有不明白,或者代码有问题的可以留言告诉我。谢谢大家。