回答編集履歴

1

追記

2016/06/28 06:26

投稿

Zuishin
Zuishin

スコア28660

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
+