回答編集履歴
2
質問文への回答の追加
test
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
#
|
1
|
+
# 文法について
|
2
2
|
if文の使い方がわかっていないようです。
|
3
3
|
```js
|
4
4
|
if(条件A){
|
5
5
|
条件Aに当てはまるときの処理
|
6
6
|
}
|
7
|
-
else{
|
7
|
+
else{ //else節は省略可
|
8
8
|
条件Aに当てはまらないときの処理
|
9
9
|
}
|
10
10
|
```
|
@@ -12,9 +12,10 @@
|
|
12
12
|
- 条件分岐した後の各処理を`{}`で囲む
|
13
13
|
- else節には条件文はつかない
|
14
14
|
|
15
|
+
---
|
15
|
-
|
16
|
+
return文についても理解できていないようです。
|
16
17
|
|
17
|
-
`return`は関数の処理を終了
|
18
|
+
`return`は関数の処理を終了する(&関数の呼び出し元に戻り値を返す)ときに使うものです。`return`の後ろに処理を付け足しても、その処理は実行されません。
|
18
19
|
```js
|
19
20
|
function hoge(){
|
20
21
|
console.log('hoge');
|
@@ -22,12 +23,14 @@
|
|
22
23
|
console.log('foo'); //この処理は実行されない
|
23
24
|
}
|
24
25
|
```
|
25
|
-
|
26
|
+
よって、「diskが0以下のときは処理を行わない」ようにするには、最初に`if(disk <= 0){return;}`を入れれば良いです。
|
27
|
+
|
28
|
+
また、20020822さんのコードでは、条件分岐後の各処理の1行目に`return`を入れてしまっているので、続く処理が実行されません。ここの`return`は削除しましょう。
|
26
29
|
|
27
30
|
詳しくは以下のサイトを参考にしてください。
|
28
31
|
https://www.javadrive.jp/javascript/function/index4.html
|
29
32
|
|
30
|
-
#
|
33
|
+
# 関数について
|
31
34
|
再帰関数を使った解き方はわかっているようなので、あとはif文の条件を考えましょう。
|
32
35
|
|
33
36
|
ハノイの塔の解き方は次のようになります。
|
@@ -45,11 +48,16 @@
|
|
45
48
|
|
46
49
|
参考サイト: https://manabitimes.jp/math/1311
|
47
50
|
|
48
|
-
#
|
51
|
+
# まとめ
|
49
52
|
以上のことを踏まえてコードを書き直すとこうなります。
|
50
53
|
```js
|
51
54
|
function hanoi(disk, tower1, tower2, tower3) {
|
55
|
+
if(disk <= 0){
|
56
|
+
//diskが0以下のときは処理を行わない
|
57
|
+
return;
|
58
|
+
}
|
59
|
+
|
52
|
-
|
60
|
+
if(disk == 1){
|
53
61
|
console.log(`大きさ1の円盤を${tower1}から${tower2}に移動`);
|
54
62
|
}
|
55
63
|
else{
|
1
説明追加
test
CHANGED
@@ -22,6 +22,7 @@
|
|
22
22
|
console.log('foo'); //この処理は実行されない
|
23
23
|
}
|
24
24
|
```
|
25
|
+
今回は、関数を途中で終了することはない上、戻り値も返さないので、`return`は必要ありません。
|
25
26
|
|
26
27
|
詳しくは以下のサイトを参考にしてください。
|
27
28
|
https://www.javadrive.jp/javascript/function/index4.html
|