質問編集履歴

7

コードリンク修正

2018/10/10 08:59

投稿

opyon
opyon

スコア1009

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/tree/master/Python3/qa/qa151136)
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

補足追記

2018/10/10 08:59

投稿

opyon
opyon

スコア1009

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

修正後のコードリンク追記

2018/10/10 08:56

投稿

opyon
opyon

スコア1009

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、画像追加

2018/10/10 08:52

投稿

opyon
opyon

スコア1009

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例追記

2018/10/10 07:50

投稿

opyon
opyon

スコア1009

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

まとめ

2018/10/10 07:29

投稿

opyon
opyon

スコア1009

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

実行環境追記

2018/10/10 07:20

投稿

opyon
opyon

スコア1009

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