質問編集履歴
7
コードリンク修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
|
6
6
|
|
7
|
-
[GitHub 修正後のコード](https://github.com/opyon/public/tree/master/Python3/qa/qa151136)
|
7
|
+
[GitHub 修正後のコードまとめ](https://github.com/opyon/public/tree/master/Python3/qa/qa151136)
|
8
8
|
|
9
9
|
|
10
10
|
|
@@ -88,7 +88,7 @@
|
|
88
88
|
|
89
89
|
@LouiS0616さん回答のように関数を分割すると動きました。
|
90
90
|
|
91
|
-
[GitHub 修正後のコード](https://github.com/opyon/public/
|
91
|
+
[GitHub 修正後のコード qa151136_ok2.py](https://github.com/opyon/public/blob/master/Python3/qa/qa151136/qa151136_ok2.py)
|
92
92
|
|
93
93
|
|
94
94
|
|
6
補足追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -80,6 +80,20 @@
|
|
80
80
|
|
81
81
|
個人的にはimportと@デコレータ追記だけなのでこちらが実用的かとは思います。
|
82
82
|
|
83
|
+
|
84
|
+
|
85
|
+
**追記補足:**
|
86
|
+
|
87
|
+
但し質問時の元のコードのままで@デコレータ追記だけでは動きませんでした。
|
88
|
+
|
89
|
+
@LouiS0616さん回答のように関数を分割すると動きました。
|
90
|
+
|
91
|
+
[GitHub 修正後のコード](https://github.com/opyon/public/tree/master/Python3/qa/qa151136)
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
|
96
|
+
|
83
97
|
```
|
84
98
|
|
85
99
|
from functools import lru_cache
|
5
修正後のコードリンク追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -4,6 +4,12 @@
|
|
4
4
|
|
5
5
|
|
6
6
|
|
7
|
+
[GitHub 修正後のコード](https://github.com/opyon/public/tree/master/Python3/qa/qa151136)
|
8
|
+
|
9
|
+
|
10
|
+
|
11
|
+
|
12
|
+
|
7
13
|
動かなかった環境は以下のとおりです。
|
8
14
|
|
9
15
|
全てNG
|
4
コマンドラインでもNG、画像追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -14,6 +14,8 @@
|
|
14
14
|
|
15
15
|
・IDE:Eclipse4.8 , Jupyter Notebook
|
16
16
|
|
17
|
+
・[コマンドライン](https://gyazo.com/f9497b61400ede6f5970de88107533e5)
|
18
|
+
|
17
19
|
|
18
20
|
|
19
21
|
その他コメントより
|
3
誤記訂正とimport例追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -70,7 +70,23 @@
|
|
70
70
|
|
71
71
|
どちらのコードも試してみて動作確認出来ました。
|
72
72
|
|
73
|
-
個人的にはimportと@
|
73
|
+
個人的にはimportと@デコレータ追記だけなのでこちらが実用的かとは思います。
|
74
|
+
|
75
|
+
```
|
76
|
+
|
77
|
+
from functools import lru_cache
|
78
|
+
|
79
|
+
# @lru_cache(maxsize=None)
|
80
|
+
|
81
|
+
@lru_cache(maxsize=8)
|
82
|
+
|
83
|
+
def fibo(n):
|
84
|
+
|
85
|
+
```
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
|
74
90
|
|
75
91
|
|
76
92
|
|
2
まとめ
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,3 +1,89 @@
|
|
1
|
+
###まとめ
|
2
|
+
|
3
|
+
動くか動かないかの切り分けは完全には出来ていませんが特にPythonのVer差でもOS差でも無いような気がします。
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
動かなかった環境は以下のとおりです。
|
8
|
+
|
9
|
+
全てNG
|
10
|
+
|
11
|
+
・OS:Windows10 Home 64bit
|
12
|
+
|
13
|
+
・Python:3.6.6 , 3.7.0
|
14
|
+
|
15
|
+
・IDE:Eclipse4.8 , Jupyter Notebook
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
その他コメントより
|
20
|
+
|
21
|
+
NG
|
22
|
+
|
23
|
+
・3.4.3 on Windows8.1/64bit
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
OK
|
28
|
+
|
29
|
+
・3.7.0
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
###
|
34
|
+
|
35
|
+
@hayataka2049さんの回答より
|
36
|
+
|
37
|
+
[Python: What is the hard recursion limit for Linux, Mac and Windows? - Stack Overflow](https://stackoverflow.com/questions/2917210/python-what-is-the-hard-recursion-limit-for-linux-mac-and-windows)
|
38
|
+
|
39
|
+
[Windows版Pythonの再帰呼び出し制限 - kusano_kの日記](http://d.hatena.ne.jp/kusano_k/20130824/1377366249)
|
40
|
+
|
41
|
+
> sys.setrecursionlimit(1024*1024)
|
42
|
+
|
43
|
+
で再帰呼び出しの深さ制限を変更できるけど、Pythonのスタックサイズが足りないらしく、Pythonが不正終了する。Windowsの場合、新しく作成されるスタックのサイズを
|
44
|
+
|
45
|
+
thread.stack_size(128*1024*1024)
|
46
|
+
|
47
|
+
で変更できる。
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
###
|
52
|
+
|
53
|
+
@LouiS0616さん回答より
|
54
|
+
|
55
|
+
[@functools.lru_cache(maxsize=128, typed=False)](https://docs.python.jp/3/library/functools.html#functools.lru_cache)
|
56
|
+
|
57
|
+
> 関数をメモ化用の呼び出し可能オブジェクトでラップし、最近の呼び出し最大 maxsize 回まで保存するするデコレータです。高価な関数や I/O に束縛されている関数を定期的に同じ引数で呼び出すときに、時間を節約できます。
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
> フィボナッチ数列絡みの問題を再帰で実装する際は、
|
66
|
+
|
67
|
+
functools.lru_cache でメモ化するとトラブルが少ないです。
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
どちらのコードも試してみて動作確認出来ました。
|
72
|
+
|
73
|
+
個人的にはimportと@アノテーション追記だけなのでこちらが実用的かとは思います。
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
Pythonで再帰階層が深くなる場合には気をつけるという教訓にもなりました。
|
78
|
+
|
79
|
+
回答やコメントなどでの情報提供ありがとうございました。
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
###
|
84
|
+
|
85
|
+
|
86
|
+
|
1
87
|
###知りたいこと
|
2
88
|
|
3
89
|
**エラーも結果も出力されない原因が知りたいです。**
|
1
実行環境追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -15,6 +15,14 @@
|
|
15
15
|
上記問題を解くのに下記プログラムで`N=1000`を入力すると正解が出力されるはずなのですが、
|
16
16
|
|
17
17
|
関数の再帰処理を使い入力値を`N=823`以上にすると結果もエラーも表示されずに終了してしまいます。
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
###実行環境
|
22
|
+
|
23
|
+
Windows10
|
24
|
+
|
25
|
+
Python3.7.0
|
18
26
|
|
19
27
|
|
20
28
|
|