質問するログイン新規登録

回答編集履歴

1

修正

2018/03/24 11:53

投稿

8524ba23
8524ba23

スコア38350

answer CHANGED
@@ -1,13 +1,18 @@
1
1
  上の段から順に、そのまま算出すればよいです。
2
- `Python`でのコード例です。このままだと100段くらいだとかなり時間かかりますが。
2
+ `Python`でのコード例です。~~このままだと100段くらいだとかなり時間かかりますが。~~
3
+ お手軽に`lru_cache`を使ってメモ化してみました。100段でも瞬時に求まります。
3
4
  ```Python
5
+ from functools import lru_cache
6
+
7
+ @lru_cache(maxsize=1000) # サイズは適当に
4
8
  def val( row, col):
5
- if col <= 0 or col >= row: # 両端なら1
9
+ if col <= 0 or col >= row:
6
10
  return 1
7
- return val( row-1, col-1) + val(row-1,col) # 上段の一つ左とその位置の数を足す
11
+ return val( row-1, col-1) + val(row-1,col)
8
12
 
13
+ with open('ret.txt','w') as f: # 見づらいのでファイルに出力
9
- for row in range(100):
14
+ for row in range(100):
10
- for col in range(row+1):
15
+ for col in range(row+1):
11
- print( "{:3d}".format( val( row, col)), end=' ')
16
+ f.write('{:40d}'.format( val( row, col))) # 40桁で足りる
12
- print('')
17
+ f.write('\n')
13
18
  ```