# javascript 程式題 ###### tags: `JS` ___ ## 真相(答案)只有一個,但解法百百種,想像力就是超能力。 用 google,找答案,是種善用工具的能力。 ``` //題目: //寫一個 function,可以輸出以下陣列。 arr = [0,1,1,2,3,....,n] ``` 看到題目,先去分析題目,要你做甚麼。 我會想到的問題是,function,是否有輸入?可以問出題者,或是自由發揮。 可以知道,會宣告一個陣列,`arr = []` 可以知道,`arr[0]=0` 可以知道,`arr[1]=1` 把這兩件事,當特別事件做處理。 會用到,for,if,function,retuen,let ```javascript= // arr = [0,1,1,2,3,....,n] // 可以自己假設arr = [0,1,1,2,3],要如何輸出,跟有5個數。 // 解法1 function sequence1(x){ let arr = [0,1]; for(let i = 2; i<x; i++){ arr[i] = arr[i-1] + arr[i-2] } return arr; } console.log(sequence1(5)) ``` ```javascript= // 面試官。又要求 i 要從 0,開始。 // 解法2,i 要從 0,開始。 function sequence2(x){ let arr = []; for(let i = 0; i<x; i++){ if(i == 0) { arr[i] = 0 } if(i == 1) { arr[i] = 1 } if(i > 1){ arr[i] = arr[i-1] + arr[i-2] } } return arr; } console.log(sequence2(5)) // 解法2,更簡化1,if {} ,裡只有1行程式,可以去掉{} function sequence2(x){ let arr = []; for(let i = 0; i<x; i++){ if(i == 0) arr[i] = 0 if(i == 1) arr[i] = 1 if(i > 1) arr[i] = arr[i-1] + arr[i-2] } return arr; } console.log(sequence2(5)) // 解法2,更簡化2,可以用 三元判斷式 function sequence2(x){ let arr = []; for(let i = 0; i<x; i++){ arr[i]=(i == 0) ? 0 : ((i == 1) ? 1 : arr[i-1] + arr[i-2]) } return arr; } console.log(sequence2(5)) ``` ```javascript= // 解法3, // 方法2,將問題,在提出成,function。 // 第一步: 先大約寫程式的架構,將問題提出成,function。在來完成,提出的function的程式。 //依照題目,先寫一個 function,宣告空陣列,輸出arr。 //利用 for,看要重複做幾次,放入值到 arr 中。 //for 裡,很簡單,就是arr.push() //將問題,在包裝成一個,fib(i),i 是輸入,0,1,2...n,fib()會輸出,我們要的值。 function arrFib(n){ let arr = []; for(let i = 0; i < n; i++) { arr.push(fib(i)) } return arr } // 第二步: 完成 fib(i)。 // 可以知道, i == 0,return 0。i == 1,return 1。 // 故 if (n < 2) return n; // 其於,為 return fib(n - 1) + fib(n - 2);。這寫法在程式中叫做遞迴,只 function 會自己呼叫自己。 function fib(n) { if (n < 2) return n; return fib(n - 1) + fib(n - 2); } function arrFib(n){ let arr = []; for(let i = 0; i < n; i++) { arr.push(fib(i)) } return arr } console.log(arrFib(8)); ``` ```javascript= // 費氏數列 // arr = [0,1,1,2,3,....,n] // 方法1 var arr = []; for(var i = 0; i <= 3; i++) { if( i == 0) arr.push(0); if( i == 1) arr.push(1); if( i > 1) arr.push(arr[i-1] + arr[i-2]); } console.log(arr) ``` ___ ## Github 把做好的網頁秀在網路上 [Github Pages / 把做好的網頁秀在網路上【免費!!】](https://www.youtube.com/watch?v=lzEZI9wzPYU) [拯救資工系學生的基本素養—Github Page 使用教學](https://www.youtube.com/watch?v=NovKS8kWYAg)