js 斐波那契数列(兔子问题) 两种方法解决

  • A+

对于JS初学者来说,斐波那契数列一直是个头疼的问题,总是理不清思路。

希望看完这篇文章之后会对你有帮助。

 什么是斐波那契数列 :

答: 斐波那契数列,又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”。

指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……

 

题目:有个人想知道,一年之内一对兔子能繁殖多少对?于是就筑了一道围墙把一对兔子关在里面。已知一对兔子每个月可以生一对小兔子,而一对兔子从出生后第3个月起每月生一对小兔子。假如一年内没有发生死亡现象,那么,一对兔子一年内(12个月)能繁殖成多少对?

  已知兔子的规律为数列: 1,1,2,3,5,8,13,21...

 

 

答:首先我们得知道这道题的需求和步骤

 

      需求:一个数列当前项等于前两项之和。求第12项。      

      步骤:
      1.定义三个变量,然后两个初始化值。第三个作为存储使用
      2.先把第二个变量存储进入第三个变量汇总,第二个变量重新赋值成为第一个和第二个之和
      3.把存储好的第三个变量赋值给第一个变量。
      4.执行12次(因为前两项不需要计算,所以只需要执行10次)。

 

 

解析:

1.定义三个变量,然后两个初始化值。第三个作为存储使用

我们可以把这个数列想象成推箱子游戏

js 斐波那契数列(兔子问题) 两种方法解决
2.先把第二个变量存储进入第三个变量中
js 斐波那契数列(兔子问题) 两种方法解决
      然后把第二个变量重新赋值成为第一个和第二个之和。  
js 斐波那契数列(兔子问题) 两种方法解决
      3.把存储好的第三个变量赋值给第一个变量。
js 斐波那契数列(兔子问题) 两种方法解决

js 斐波那契数列(兔子问题) 两种方法解决

 

   以此类推到最后一项

js 斐波那契数列(兔子问题) 两种方法解决

 

  

 

利用for循环 代码如下:

 

//1.定义三个变量,然后两个初始化值。第三个作为存储使用
    var temp;
    var num1 = 1;
    var num2 = 1;
    //2.先把第二个变量存储进入第三个变量汇总,第二个变量重新赋值成为第一个和第二个之和
    for(var i=1;i<=10;i++){
        temp = num2;
        num2 = num1 + num2;
        //3.把存储好的第三个变量赋值给第一个变量。
        num1 = temp;
        //4.执行10次。(因为前两项不需要计算,所以只需要执行10次)
    }

    alert(num2);

第二种方法:(数组)

var arr = [];                      //申明一个数组 arr
arr[0]=1;                          //给数组arr[0]赋值:1
arr[1]=1;                          //给数组arr[1]赋值:1
for (var i=1;i<=10;i++){           //创建一个循环语句 已经定义前两月兔子的数量 只需要循环剩余十次
 arr[i+1]=arr[i]+arr[i-1];         //循环将数组中前两位数值的和赋值给第三位,依次赋值10次。
}
console.log(arr);                  //打印数组
console.log(arr[arr.length-1]);    //打印数组最后一个值 为结果。

封装一个(函数)

function getTuzi(n) {
    var num1 = 1;
    var num2 = 1;
    var temp;
    for (var i=3;i<=n;i++){
        temp = num2;
        num2 = num1 + num2;
        num1 = temp;
    }
    return num2;
}
document.write(getTuzi(12));

感谢观看,希望对您有帮助!

weinxin
我的微信
爱生活、爱学习的小伙伴可以通过扫一扫二维码添加我的个人微信一起交流!
青青子衿

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: