js算法集合(二) 斐波那契數列、楊輝三角web
上一次我跟你們分享一下作水仙花數的算法的思路,並對其擴展到自冪數的算法,此次,咱們來對斐波那契數列和楊輝三角進行研究,來加深對Javascript的理解。算法
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>
斐波那契數列其實就是左右手交換東西的複雜化,只要掌握了思路,全部的算法也都不過如此而已。數組
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 個數的和測試
④規律已經整理清楚,咱們就要研究該怎麼用代碼來實現,這裏咱們將才用二維數組進行實現;具體實現方式請看代碼,及註釋:spa
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>
下面是執行效果圖:
3d
以上就是跟你們分享的Javascript實現楊輝三角的方法,固然你能夠打印更多行,或者定義變量接受prompt();方法的值,來手動控制打印行數。調試
3、下面主要分享一下我作算法題的思路code
1)通常拿到題,首先要看它是個什麼東西orm
2)第二,分析裏面的規律
3)思考如何使用代碼將規律寫出來,
4)有了想法就進行實踐,在編譯器寫出代碼
5)遇到了bug,或者卡在某個地方用goole的控制檯加斷點進行調試,固然你能夠用別的瀏覽器控制檯;
6)你會發現一個算法一步步的就完成了
7)這裏是最重要的一條,沒有之一,就是往往作完一個算法,要善於自我總結,遇到了什麼問題,怎麼解決的,什麼樣的方法能夠解決什麼問題,還有沒有別的方法解決,有什麼地方粗枝大葉了,尤爲是小錯誤,必定必定要注意,養成良好的習慣,由於實踐告訴咱們,越小的錯誤隱藏的越深,越不容易發現。有時候調試了半天bug發現居然是由於拼錯了單詞,你會啼笑皆非,甚至想打本身一巴掌。總之,總結纔是進步最大的時候。
最後,但願你們能有所收穫,謝謝!
本次分享就到這裏
謝謝你們的觀看
但願能對你們有所啓發
有更好的方法或不一樣的意見請在留言區跟我交流