回答編集履歴
3
追記
answer
CHANGED
@@ -1,18 +1,68 @@
|
|
1
1
|
> なぜ-1をするのでしょうか?
|
2
2
|
|
3
|
-
第1項、第2項は既知なので、
|
4
|
-
第n項を求める際の計算回数がn-2回で済むから。
|
3
|
+
第1項、第2項は既知なので、第n項を求める際の計算回数がn-2回で済むから。
|
5
4
|
|
6
|
-
1を引いているのはカウンタ変数
|
5
|
+
1を引いているのはカウンタ変数iの初期値を1にしているからです。
|
7
6
|
これを最初から2にしてしまえば while i < count で充分な筈。
|
8
7
|
|
9
8
|
> fib.append(fib[i] + fib[i-1])
|
10
9
|
i += 1 ここの処理で1.1.2.3.5.8の処理をしているのでしょうか?
|
11
10
|
|
12
11
|
iにどんな値が入っていて、fib[i]とfib[i-1]が何を指しているのか確認すると良いです。
|
12
|
+
```Python
|
13
|
+
def gen_fib():
|
14
|
+
count = 10 # とりあえず固定
|
15
|
+
i = 1
|
13
16
|
|
17
|
+
# elif count > 2:
|
18
|
+
fib = [1,1]
|
19
|
+
while i < (count - 1):
|
20
|
+
print(f'fib={fib}')
|
21
|
+
print(f'i={i}, fib[i]={fib[i]}, fib[i-1]={fib[i-1]}')
|
22
|
+
print()
|
23
|
+
|
24
|
+
fib.append(fib[i] + fib[i-1])
|
25
|
+
i += 1
|
26
|
+
|
27
|
+
print(f'return: {fib}')
|
28
|
+
return fib
|
29
|
+
|
30
|
+
|
31
|
+
gen_fib()
|
32
|
+
```
|
33
|
+
|
34
|
+
**実行結果** [Wandbox](https://wandbox.org/permlink/hO0PhWOcVtizHwWc)
|
35
|
+
```
|
36
|
+
fib=[1, 1]
|
37
|
+
i=1, fib[i]=1, fib[i-1]=1
|
38
|
+
|
39
|
+
fib=[1, 1, 2]
|
40
|
+
i=2, fib[i]=2, fib[i-1]=1
|
41
|
+
|
42
|
+
fib=[1, 1, 2, 3]
|
43
|
+
i=3, fib[i]=3, fib[i-1]=2
|
44
|
+
|
45
|
+
fib=[1, 1, 2, 3, 5]
|
46
|
+
i=4, fib[i]=5, fib[i-1]=3
|
47
|
+
|
48
|
+
fib=[1, 1, 2, 3, 5, 8]
|
49
|
+
i=5, fib[i]=8, fib[i-1]=5
|
50
|
+
|
51
|
+
fib=[1, 1, 2, 3, 5, 8, 13]
|
52
|
+
i=6, fib[i]=13, fib[i-1]=8
|
53
|
+
|
54
|
+
fib=[1, 1, 2, 3, 5, 8, 13, 21]
|
55
|
+
i=7, fib[i]=21, fib[i-1]=13
|
56
|
+
|
57
|
+
fib=[1, 1, 2, 3, 5, 8, 13, 21, 34]
|
58
|
+
i=8, fib[i]=34, fib[i-1]=21
|
59
|
+
|
60
|
+
return: [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
|
61
|
+
```
|
62
|
+
|
63
|
+
余談
|
14
64
|
---
|
15
|
-
あんまり良いお手本になる
|
65
|
+
ご提示のコードは、あんまり良いお手本になるようには見えません。
|
16
66
|
再帰処理を避けるとしても、次のように書くのがより簡潔ではないでしょうか。
|
17
67
|
```Python
|
18
68
|
def make_fib(cnt):
|
2
追記
answer
CHANGED
@@ -1,9 +1,16 @@
|
|
1
|
+
> なぜ-1をするのでしょうか?
|
2
|
+
|
1
3
|
第1項、第2項は既知なので、
|
2
4
|
第n項を求める際の計算回数がn-2回で済むから。
|
3
5
|
|
4
6
|
1を引いているのはカウンタ変数のiの初期値を1にしているからです。
|
5
7
|
これを最初から2にしてしまえば while i < count で充分な筈。
|
6
8
|
|
9
|
+
> fib.append(fib[i] + fib[i-1])
|
10
|
+
i += 1 ここの処理で1.1.2.3.5.8の処理をしているのでしょうか?
|
11
|
+
|
12
|
+
iにどんな値が入っていて、fib[i]とfib[i-1]が何を指しているのか確認すると良いです。
|
13
|
+
|
7
14
|
---
|
8
15
|
あんまり良いお手本になるコードには見えません。
|
9
16
|
再帰処理を避けるとしても、次のように書くのがより簡潔ではないでしょうか。
|
@@ -14,4 +21,12 @@
|
|
14
21
|
fib.append(fib[-1] + fib[-2])
|
15
22
|
|
16
23
|
return fib[:cnt]
|
17
|
-
```
|
24
|
+
```
|
25
|
+
|
26
|
+
コードの書き方について
|
27
|
+
---
|
28
|
+
teratailには、コードを見やすく表示する機能があります。
|
29
|
+
質問編集画面を開き、コードを選択した状態で<code>ボタンを押して下さい。
|
30
|
+

|
31
|
+
|
32
|
+
特にPythonの場合、インデントが崩れるとコードの意味が変わってしまいます。
|
1
追記
answer
CHANGED
@@ -2,4 +2,16 @@
|
|
2
2
|
第n項を求める際の計算回数がn-2回で済むから。
|
3
3
|
|
4
4
|
1を引いているのはカウンタ変数のiの初期値を1にしているからです。
|
5
|
-
これを最初から2にしてしまえば while i < count で充分な筈。
|
5
|
+
これを最初から2にしてしまえば while i < count で充分な筈。
|
6
|
+
|
7
|
+
---
|
8
|
+
あんまり良いお手本になるコードには見えません。
|
9
|
+
再帰処理を避けるとしても、次のように書くのがより簡潔ではないでしょうか。
|
10
|
+
```Python
|
11
|
+
def make_fib(cnt):
|
12
|
+
fib = [1, 1]
|
13
|
+
for _ in range(cnt-2):
|
14
|
+
fib.append(fib[-1] + fib[-2])
|
15
|
+
|
16
|
+
return fib[:cnt]
|
17
|
+
```
|