0%

JS 筆記 - 簡化法 + 函式填空法實作九九乘法表

math

找出規律

延續之前的練習,要馬上實作九九乘法表可能有點困難,但可以先試找出一個乘法表的規律,

先找1*1 到 1*9 的規律,

1
2
3
for (let i = 1; i <= 9; i++) {
console.log("1" + "*" + i + "=" + "1" * i);
}

似乎可以以此類推,把 1 換成 2 - 9 的數字。

1
2
3
4
5
6
7
for (let i = 1; i <= 9; i++) {
console.log("2" + "*" + i + "=" + "2" * i);
}

for (let i = 1; i <= 9; i++) {
console.log("3" + "*" + i + "=" + "3" * i);
}

.
.
.

1
2
3
for (let i = 1; i <= 9; i++) {
console.log("9" + "*" + i + "=" + "9" * i);
}

恩… 有點暴力,但的確達到效果了。

改成函式

除了帶入不同的數字,其他都是相同重複出現的程式碼,改成函式包裝,
只要函式的參數,帶入不同的數字,就可以得到不同乘法表的結果。

1
2
3
4
5
function printTable(j) {
for (let i = 0; i <= 9; i++) {
console.log(`${j} * ${i} = ${j * i}`);
}
}

使用迴圈跑出九九乘法表

目前是各自獨立的乘法表,現在要做成九九乘法表,就只要把最外面的數列用迴圈跑出 2~9 的數列,
再將剛剛的函式放到迴圈中,就可以依序跑出九九乘法表。

1
2
3
for (let j = 2; j <= 9; j++) {
printTable(j);
}

然後就完成了!

完整的九九乘法表程式碼。

1
2
3
4
5
6
7
8
9
10
11
//獨立的乘法表
function printTable(j) {
for (let i = 1; i <= 9; i++) {
console.log(`${j} * ${i} = ${j * i}`);
}
}

// 2~9 帶入乘法表
for (let j = 2; j <= 9; j++) {
printTable(j);
}

心得

  1. 先用簡化法跑出第一個結果。
  2. 發現會有重複的程式碼出現,使用函式封裝。
  3. 又發現有重複的動作,再把函式帶進去,得到想要的結果。

雙層迴圈

使用雙層迴圈改寫,也就是把外層迴圈中的函式,改成封裝函式中的程式碼。

1
2
3
4
5
6
//雙迴圈版本的九九乘法表
for (let j = 2; j <= 9; j++) {
for (let i = 1; i <= 9; i++) {
console.log(`${j} * ${i} = ${j * i}`);
}
}

雙層迴圈一開始對新手比較不友善,因為無法第一時間看出來到底在做什麼。

小結

透過簡化法跟函式填空法,可以先把流程跟動作分開,然後再做整合與優化得到更簡易的程式碼。

參考資料

  1. 先別急著寫 leetcode