回答編集履歴

3

追記

2017/11/25 12:00

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -52,6 +52,8 @@
52
52
 
53
53
  最終的にリストにするなら、ジェネレータとあまり性能差はないかと思います。
54
54
 
55
+ **(追記:append呼び出しのオーバーヘッドに留意する必要はあります。)**
56
+
55
57
  再帰が深くなりすぎるとスタックから溢れますが...
56
58
 
57
59
  ```Python

2

追記

2017/11/25 12:00

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -73,3 +73,7 @@
73
73
  RecursionError: maximum recursion depth exceeded
74
74
 
75
75
  ```
76
+
77
+
78
+
79
+ 可読性に大きな差がないのであれば、再帰を積極的に採用する理由はないです。

1

追記

2017/11/25 11:36

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -19,3 +19,57 @@
19
19
  [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]
20
20
 
21
21
  ```
22
+
23
+
24
+
25
+ ---
26
+
27
+ そういえば、そもそもご提示のコードは再帰関数じゃないですね。
28
+
29
+ 再帰を使って書くなら、こんな感じです。
30
+
31
+ ```Python
32
+
33
+ >>> def recursive_func_repeat(I, ret):
34
+
35
+ ... if not I:
36
+
37
+ ... return ret
38
+
39
+ ... ret.append(2 * ret[-1])
40
+
41
+ ... return recursive_func_repeat(I-1, ret)
42
+
43
+ ...
44
+
45
+ >>> recursive_func_repeat(10, [1])
46
+
47
+ [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]
48
+
49
+ ```
50
+
51
+
52
+
53
+ 最終的にリストにするなら、ジェネレータとあまり性能差はないかと思います。
54
+
55
+ 再帰が深くなりすぎるとスタックから溢れますが...
56
+
57
+ ```Python
58
+
59
+ >>> recursive_func_repeat(10000, [1])
60
+
61
+ Traceback (most recent call last):
62
+
63
+ File "<stdin>", line 1, in <module>
64
+
65
+ File "<stdin>", line 5, in recursive_func_repeat
66
+
67
+ File "<stdin>", line 5, in recursive_func_repeat
68
+
69
+ File "<stdin>", line 5, in recursive_func_repeat
70
+
71
+ [Previous line repeated 995 more times]
72
+
73
+ RecursionError: maximum recursion depth exceeded
74
+
75
+ ```