回答編集履歴

2

表現の変更

2017/03/01 07:02

投稿

haru666
haru666

スコア1593

test CHANGED
@@ -1,8 +1,8 @@
1
- 今回の場合は再起呼び出しのコストすぎることが最初の原因なので、そっちのパッチが大事かなと思います。コールスタックは有限なので…いくらでも大きくなるタイプの再帰呼び出しは考え方を変えないといけないかなと。
1
+ 今回の場合は再起呼び出し回数すぎることが最初の原因なので、そっちのパッチが大事かなと思います。コールスタックは有限なので…数字を増やすとリニアに呼び出し回数が増えるタイプの再帰呼び出しは考え方を変えないといけないかなと。
2
2
 
3
3
 
4
4
 
5
- 今回の設計の場合は隙間なくnの値が取られるので、再帰的じゃなくて、下から計算すればいいんじゃないかと思います。
5
+ 幸い、今回の設計の場合は隙間なくnの値が取られるので、再帰的じゃなくて、下から計算すればいいんじゃないかと思います。
6
6
 
7
7
 
8
8
 

1

追記

2017/03/01 07:02

投稿

haru666
haru666

スコア1593

test CHANGED
@@ -1,4 +1,8 @@
1
+ 今回の場合は再起呼び出しのコストが高すぎることが最初の原因なので、そっちのパッチが大事かなと思います。コールスタックは有限なので…いくらでも大きくなるタイプの再帰呼び出しは考え方を変えないといけないかなと。
2
+
3
+
4
+
1
- の設計の場合隙間なくnの値が取られるので、そもそも再帰的じゃなくて、下から計算すればいいんじゃないかなぁ
5
+ 今回の設計の場合隙間なくnの値が取られるので、再帰的じゃなくて、下から計算すればいいんじゃないかと思います。
2
6
 
3
7
 
4
8
 
@@ -75,3 +79,9 @@
75
79
  }
76
80
 
77
81
  ```
82
+
83
+
84
+
85
+ この関数は現状のサンプルでは参照透過なので、予め決まったnの値に対応する辞書を生成しておくことによってメモリスペースと計算量をトレードオフにできます。
86
+
87
+ ファイルに全部書き出しておいてそこから値を引っ張ってきてもいいですし、等間隔に辞書で計算結果をもっておくことによって計算量の最大を固定することもできます。