回答編集履歴

1

追記:

2016/11/02 05:17

投稿

e-cube
e-cube

スコア284

test CHANGED
@@ -1,6 +1,6 @@
1
1
  原因はProcessingの実行環境であるJavaと
2
2
 
3
- Processing.js(Javascript)の実行環境であるブラウザと
3
+ Processing.jsJavascriptの実行環境であるブラウザと
4
4
 
5
5
  扱えるスタックの上限が違うためでしょう
6
6
 
@@ -18,7 +18,7 @@
18
18
 
19
19
  Processing.jsでは引数が6500を超えた時点で
20
20
 
21
- ブラウザ(Safari)
21
+ ブラウザSafari
22
22
 
23
23
  RangeError: Maximum call stack size exceeded.
24
24
 
@@ -107,3 +107,69 @@
107
107
  - 同様のエラーが出なかったら→draw()の中で使用している関数・メソッドの中から問題のあるものを特定する
108
108
 
109
109
  という感じでやって行くと思います
110
+
111
+
112
+
113
+ 追記:
114
+
115
+ 上記のコードをp5.jsで書き直してみたところ
116
+
117
+ sum(15000)でもスタックオーバーフローは発生しませんでした
118
+
119
+ Processing(Java)では15000にするとスタックオーバーフローとなるため
120
+
121
+ むしろp5.jsの方が扱えるスタックの上限は高いのかもしれません
122
+
123
+
124
+
125
+ ただp5.jsだと書き換えが発生するため
126
+
127
+ 結構手間がかかるとは思います
128
+
129
+
130
+
131
+ pde→p5.jsのトランスレータとかあれば良いんですけどね
132
+
133
+
134
+
135
+ 以下p5.js版のコードです
136
+
137
+ ```JavaScript
138
+
139
+ function setup()
140
+
141
+ {
142
+
143
+ console.log(sum(15000));
144
+
145
+ }
146
+
147
+
148
+
149
+ function draw()
150
+
151
+ {
152
+
153
+
154
+
155
+ }
156
+
157
+
158
+
159
+ function sum(n)
160
+
161
+ {
162
+
163
+ if(n<=1){
164
+
165
+ return n;
166
+
167
+ }else{
168
+
169
+ return sum(n-1)+n;
170
+
171
+ }
172
+
173
+ }
174
+
175
+ ```