teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記:

2016/11/02 05:17

投稿

e-cube
e-cube

スコア284

answer CHANGED
@@ -1,5 +1,5 @@
1
1
  原因はProcessingの実行環境であるJavaと
2
- Processing.js(Javascript)の実行環境であるブラウザと
2
+ Processing.jsJavascriptの実行環境であるブラウザと
3
3
  扱えるスタックの上限が違うためでしょう
4
4
 
5
5
  例えば私の環境では
@@ -8,7 +8,7 @@
8
8
  Processingでは普通に50005000と表示されますが
9
9
 
10
10
  Processing.jsでは引数が6500を超えた時点で
11
- ブラウザ(Safari)
11
+ ブラウザSafari
12
12
  RangeError: Maximum call stack size exceeded.
13
13
  とエラーが出て結果が表示されなくなりました
14
14
 
@@ -52,4 +52,37 @@
52
52
  - draw()の中身すべてをいったんコメントアウトして実行
53
53
  - 同様のエラーが出たら→setup()の中で使用している関数・メソッドの中から問題のあるものを特定する
54
54
  - 同様のエラーが出なかったら→draw()の中で使用している関数・メソッドの中から問題のあるものを特定する
55
- という感じでやって行くと思います
55
+ という感じでやって行くと思います
56
+
57
+ 追記:
58
+ 上記のコードをp5.jsで書き直してみたところ
59
+ sum(15000)でもスタックオーバーフローは発生しませんでした
60
+ Processing(Java)では15000にするとスタックオーバーフローとなるため
61
+ むしろp5.jsの方が扱えるスタックの上限は高いのかもしれません
62
+
63
+ ただp5.jsだと書き換えが発生するため
64
+ 結構手間がかかるとは思います
65
+
66
+ pde→p5.jsのトランスレータとかあれば良いんですけどね
67
+
68
+ 以下p5.js版のコードです
69
+ ```JavaScript
70
+ function setup()
71
+ {
72
+ console.log(sum(15000));
73
+ }
74
+
75
+ function draw()
76
+ {
77
+
78
+ }
79
+
80
+ function sum(n)
81
+ {
82
+ if(n<=1){
83
+ return n;
84
+ }else{
85
+ return sum(n-1)+n;
86
+ }
87
+ }
88
+ ```