回答編集履歴

3

追記

2019/09/21 05:47

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -2,13 +2,11 @@
2
2
 
3
3
 
4
4
 
5
- 第1項、第2項は既知なので、
6
-
7
- 第n項を求める際の計算回数がn-2回で済むから。
5
+ 1項、第2項は既知なので、第n項を求める際の計算回数がn-2回で済むから。
8
6
 
9
7
 
10
8
 
11
- 1を引いているのはカウンタ変数iの初期値を1にしているからです。
9
+ 1を引いているのはカウンタ変数iの初期値を1にしているからです。
12
10
 
13
11
  これを最初から2にしてしまえば while i < count で充分な筈。
14
12
 
@@ -22,11 +20,113 @@
22
20
 
23
21
  iにどんな値が入っていて、fib[i]とfib[i-1]が何を指しているのか確認すると良いです。
24
22
 
23
+ ```Python
25
24
 
25
+ def gen_fib():
26
+
27
+ count = 10 # とりあえず固定
28
+
29
+ i = 1
30
+
31
+
32
+
33
+ # elif count > 2:
34
+
35
+ fib = [1,1]
36
+
37
+ while i < (count - 1):
38
+
39
+ print(f'fib={fib}')
40
+
41
+ print(f'i={i}, fib[i]={fib[i]}, fib[i-1]={fib[i-1]}')
42
+
43
+ print()
44
+
45
+
46
+
47
+ fib.append(fib[i] + fib[i-1])
48
+
49
+ i += 1
50
+
51
+
52
+
53
+ print(f'return: {fib}')
54
+
55
+ return fib
56
+
57
+
58
+
59
+
60
+
61
+ gen_fib()
62
+
63
+ ```
64
+
65
+
66
+
67
+ **実行結果** [Wandbox](https://wandbox.org/permlink/hO0PhWOcVtizHwWc)
68
+
69
+ ```
70
+
71
+ fib=[1, 1]
72
+
73
+ i=1, fib[i]=1, fib[i-1]=1
74
+
75
+
76
+
77
+ fib=[1, 1, 2]
78
+
79
+ i=2, fib[i]=2, fib[i-1]=1
80
+
81
+
82
+
83
+ fib=[1, 1, 2, 3]
84
+
85
+ i=3, fib[i]=3, fib[i-1]=2
86
+
87
+
88
+
89
+ fib=[1, 1, 2, 3, 5]
90
+
91
+ i=4, fib[i]=5, fib[i-1]=3
92
+
93
+
94
+
95
+ fib=[1, 1, 2, 3, 5, 8]
96
+
97
+ i=5, fib[i]=8, fib[i-1]=5
98
+
99
+
100
+
101
+ fib=[1, 1, 2, 3, 5, 8, 13]
102
+
103
+ i=6, fib[i]=13, fib[i-1]=8
104
+
105
+
106
+
107
+ fib=[1, 1, 2, 3, 5, 8, 13, 21]
108
+
109
+ i=7, fib[i]=21, fib[i-1]=13
110
+
111
+
112
+
113
+ fib=[1, 1, 2, 3, 5, 8, 13, 21, 34]
114
+
115
+ i=8, fib[i]=34, fib[i-1]=21
116
+
117
+
118
+
119
+ return: [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
120
+
121
+ ```
122
+
123
+
124
+
125
+ 余談
26
126
 
27
127
  ---
28
128
 
29
- あんまり良いお手本になるコードには見えません。
129
+ ご提示のコードは、あんまり良いお手本になるようには見えません。
30
130
 
31
131
  再帰処理を避けるとしても、次のように書くのがより簡潔ではないでしょうか。
32
132
 

2

追記

2019/09/21 05:47

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -1,3 +1,7 @@
1
+ > なぜ-1をするのでしょうか?
2
+
3
+
4
+
1
5
  第1項、第2項は既知なので、
2
6
 
3
7
  第n項を求める際の計算回数がn-2回で済むから。
@@ -7,6 +11,16 @@
7
11
  1を引いているのはカウンタ変数のiの初期値を1にしているからです。
8
12
 
9
13
  これを最初から2にしてしまえば while i < count で充分な筈。
14
+
15
+
16
+
17
+ > fib.append(fib[i] + fib[i-1])
18
+
19
+ i += 1 ここの処理で1.1.2.3.5.8の処理をしているのでしょうか?
20
+
21
+
22
+
23
+ iにどんな値が入っていて、fib[i]とfib[i-1]が何を指しているのか確認すると良いです。
10
24
 
11
25
 
12
26
 
@@ -31,3 +45,19 @@
31
45
  return fib[:cnt]
32
46
 
33
47
  ```
48
+
49
+
50
+
51
+ コードの書き方について
52
+
53
+ ---
54
+
55
+ teratailには、コードを見やすく表示する機能があります。
56
+
57
+ 質問編集画面を開き、コードを選択した状態で<code>ボタンを押して下さい。
58
+
59
+ ![Python](56957fe805d9d7befa7dba6a98676d2b.gif)
60
+
61
+
62
+
63
+ 特にPythonの場合、インデントが崩れるとコードの意味が変わってしまいます。

1

追記

2019/09/21 05:40

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -7,3 +7,27 @@
7
7
  1を引いているのはカウンタ変数のiの初期値を1にしているからです。
8
8
 
9
9
  これを最初から2にしてしまえば while i < count で充分な筈。
10
+
11
+
12
+
13
+ ---
14
+
15
+ あんまり良いお手本になるコードには見えません。
16
+
17
+ 再帰処理を避けるとしても、次のように書くのがより簡潔ではないでしょうか。
18
+
19
+ ```Python
20
+
21
+ def make_fib(cnt):
22
+
23
+ fib = [1, 1]
24
+
25
+ for _ in range(cnt-2):
26
+
27
+ fib.append(fib[-1] + fib[-2])
28
+
29
+
30
+
31
+ return fib[:cnt]
32
+
33
+ ```