js算法集合(二) javascript實現斐波那契數列 (兔子數列) Javascript實現楊輝三角


 

js算法集合(二)  斐波那契數列、楊輝三角

 

                上一次我跟大家分享一下做水仙花數的算法的思路,並對其擴展到自冪數的算法,這次,我們來對斐波那契數列和楊輝三角進行研究,來加深對Javascript的理解。

   
   
   一、 Javascript實現斐波那契數列
    ①要用Javascript實現斐波那契數列,我們首先要了解什么是斐波那契數列;斐波那契數列(Fibonacci sequence),又稱黃金分割數列、因數學家列昂納多·斐波那契(Leonardoda Fibonacci)以兔子繁殖為例子而引入,故又稱為“兔子數列”,指的是這樣一個數列:1、1、2、3、5、8、13、21、34、……
    ②了解了什么是斐波那契數列我們就要開始分析該怎么下手。通過研究規律,得規律如下圖:
      
    ③拿到了規律,我們就要研究該怎么用代碼來實現,具體怎么實現請看代碼,及注釋:
     

    

 1 <script>
 2         
 3         var a = 1;                           //聲明第一個數為1
 4         var b = 1;                           //聲明第二個數為1
 5         var c;                              //聲明一個中間變量c
 6         document.write(a+"<br>"+b+"<br>");   //打印前兩個已知數
 7         for (var i = 3; i <= 10; i++){      //前面兩個已知,從第三個開始循環,10為打印數列內容的個數,可自行測試
 8             c = a + b;                        //每個數等於它前面兩個的和
 9             document.write(c+"<br>");           //打印第i個數;以i=3;為例:c=2
10             a = b;                              //等打印下一個數時,a和b都變了,b的值給a,a=1,c的值給b,b=2;
11             b = c;                              // a和b都向后推了一位,來進行下次運算
12         }
13         
14     </script>

   斐波那契數列其實就是左右手交換東西的復雜化,只要掌握了思路,所有的算法也都不過如此而已。

 

 

 

   
  二、Javascript實現楊輝三角
    ①要用Javascript實現楊輝三角,我們首先要了解什么是楊輝三角;楊輝三角,是二項式系數在三角形中的一種幾何排列。具體情況如下:
      
 1                                             1
 2                                           1  1
 3                                          1  2  1
 4                                        1  3  3  1
 5                                      1  4  6  4  1
 6                                    1  5  10  10  5  1
 7                                  1  6  15  20  15  6  1
 8                                1  7  21  35  35  21  7  1
 9                              1  8  28  56  70  56  28  8  1
10                           1  9  36  84  126  126  84  36  9  1
11                       1  10  45  120  210  252  210  120  45  10  1
12                     1  11  55  165  330  462  462  330  165  55  11  1
13                  1  12  66  220  495  792  924  792  495  220  66  12  1
14               1  13  78  286  715  1287  1716  1716  1287  715  286  78  13  1
15         1  14  91  364  1001  2002  3003  3432  3003  2002  1001  364  91  14  1
16     1  15  105  455  1365  3003  5005  6435  6435  5005  3003  1365  455  105  15  1
17 1  16  120  560  1820  4368  8008  11440  12870  11440  8008  4368  1820  560  120  16  1
18 ......

    ②了解了什么是楊輝三角,我們就要開始分析該怎么下手。下面我們截取楊輝三角的一部分來進行分析:

   

1           1
2         1  1             ①每行的第一個和最后一個數都是“1
3       1  2  1        ②第一行有一個數,第二行有兩個數,第三行有三個數………
4     1  3  3  1
5    1  4  6  4  1      ③以本行(第五行)為例:第五行的第二個等於第四行第1個和第二個數的和,第五行的第三個等於第四行第二個和第三個數的和,      
6  ……

    ③將第三條規律整理一下就是:不符合第一條規律時,第 i 行的第 j 個數等於 第 i-1行的 第(j-1)個和第 j 個數的和


    ④規律已經整理清楚,我們就要研究該怎么用代碼來實現,這里我們將才用二維數組進行實現;具體實現方式請看代碼,及注釋:

     
 1  <script>
 2         var arr = new Array();                            //定義一個數組
 3         for(var i = 0; i < 10; i++){                      //做一個長度10的數組
 4             arr[i] = new Array();                         //將數組定義為二維數組
 5             for (var j = 1; j<(10-i); j++){              //打印空格看起來好看點
 6                 document.write("<span style='display: inline-block;width: 15px;'></span>");
 7             };
 8             for (j = 0; j < i; j++)if (j == 0 || j == i - 1) {                       //每行的第一個和第i個等於1
 9                 arr[i][j] = 1;                          //每行的第一個和最后一個都是 1
10                 document.write("<span style='display: inline-block;width: 30px;text-align: center;'>" + arr[i][j] + "</span>");
11             } else {
12                 arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];  //第 i 行的第 j 個數等於 第 i-1行的 第(j-1)個和第 j 個數的和
13                 document.write("<span style='display: inline-block;width: 30px;text-align: center;'>" + arr[i][j] + "</span>");
14             }
15             document.write("<br>")
16         }
17 
18     </script>

下面是執行效果圖:

    以上就是跟大家分享的Javascript實現楊輝三角的方法,當然你可以打印更多行,或者定義變量接受prompt();方法的值,來手動控制打印行數。

 

  三、下面主要分享一下我做算法題的思路

 

    1)一般拿到題,首先要看它是個什么東西

 

    2)第二,分析里面的規律

 

    3)思考如何使用代碼將規律寫出來,

 

    4)有了想法就進行實踐,在編譯器寫出代碼

 

    5)遇到了bug,或者卡在某個地方用goole的控制台加斷點進行調試,當然你可以用別的瀏覽器控制台;

 

    6)你會發現一個算法一步步的就完成了

 

    7)這里是最重要的一條,沒有之一,就是每每做完一個算法,要善於自我總結,遇到了什么問題,怎么解決的,什么樣的方法可以解決什么問題,還有沒有別的方法解決,有什么地方粗心大意了,尤其是小錯誤,一定一定要注意,養成良好的習慣,因為實踐告訴我們,越小的錯誤隱藏的越深,越不容易發現。有時候調試了半天bug發現竟然是因為拼錯了單詞,你會哭笑不得,甚至想打自己一巴掌。總之,總結才是進步最大的時候。

        最后,希望大家能有所收獲,謝謝!

   

 
本次分享就到這里

   謝謝大家的觀看   

 
覺得不錯請點贊
 

希望能對大家有所啟發

有更好的方法或不同的意見請在留言區跟我交流

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM