# 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)