回答編集履歴
1
追記
test
CHANGED
@@ -27,3 +27,31 @@
|
|
27
27
|
通常の関数呼び出しの場合、関数が終了した時点でスタックに積まれたローカル変数の領域は解放されますが、再帰の場合、呼び出し側の変数は呼び出された側が終了するまで解放されません。
|
28
28
|
|
29
29
|
このため、スタックオーバーフローが起きやすくなります。
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
###追記分
|
34
|
+
|
35
|
+
```Ruby
|
36
|
+
|
37
|
+
return 0 if g > 1 && b == 0
|
38
|
+
|
39
|
+
return 1 if g == 0
|
40
|
+
|
41
|
+
```
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
この部分が問題ですね。
|
46
|
+
|
47
|
+
g == 1 && b == 0
|
48
|
+
|
49
|
+
の時、次の条件に移りますが、ここで bool が true だと、b < 0 となって永遠に再帰が終わりません。
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
スタックオーバーフローが出るときには、変数が多すぎるとかなんとかいうより以前に、ほぼ無限ループが原因です。
|
54
|
+
|
55
|
+
無限にループしていないかどうか、関数内で変数の内容やループ回数をダンプしながらデバッグされたらいいと思います。
|
56
|
+
|
57
|
+
|