回答編集履歴

1

さらに簡易化するように追記

2020/06/15 10:49

投稿

yymmt
yymmt

スコア1615

test CHANGED
@@ -58,7 +58,7 @@
58
58
 
59
59
  ```
60
60
 
61
- さらに上のソースコードをよく見ると、和を計算する箇所はT[n]しか使っていませんので、T[n-1]を覚えておく必要はないことに気がつきます。上書きして捨て良ければ変数に置き換えることができます。
61
+ さらに上のソースコードをよく見ると、和を計算する箇所はT[n]しか使っていませんので、T[n-1]を覚えておく必要はないことに気がつきます。上書きして捨て良ければ変数に置き換えることができます。
62
62
 
63
63
  ```
64
64
 
@@ -83,3 +83,25 @@
83
83
  print(sumS(10))
84
84
 
85
85
  ```
86
+
87
+ さらに上のソースコードでは n を使っていないことが分かります。2からnmaxまで繰り返していますが、 n を使っていないので0から(nmax-2)でも構いません。とにかくループ回数をnmax-1回にすれば良いことが分かります。したがってさらに簡易化できます。
88
+
89
+ ```
90
+
91
+ def sumS(nmax):
92
+
93
+ T = 2
94
+
95
+ acc = T
96
+
97
+ for _ in range(nmax - 1):
98
+
99
+ T = 3 * T - 1
100
+
101
+ acc += T
102
+
103
+ return acc
104
+
105
+ print(sumS(10))
106
+
107
+ ```