任意の行数までのパスカルの三角形(Wikipedia)を計算して表示するプログラムを作りました。
コード例1
標準入力で、目標の行数Nを受け取り、パスカルの三角形を書きます。普通に(?)for文で書いています。
N=int(input())
a=[[1]]
for i in range(1,N):
tmp=[1]
if i >1:
for j in range(1,i):
tmp.append(a[i-1][j-1]+a[i-1][j])
tmp.append(1)
a.append(tmp)
for i in a:
print(i)
#出力例
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
[1, 6, 15, 20, 15, 6, 1]
[1, 7, 21, 35, 35, 21, 7, 1]
[1, 8, 28, 56, 70, 56, 28, 8, 1]
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
1行目:標準入力でターゲットの行数を受け取ります。
2行目:パスカルの三角形の一番最初の項、「1」を初期値として2次元配列を準備します。
3行目:パスカルの三角形の2〜N段目を作成するfor文です。もしNが1なら実行されません。
4行目:一時的に使用するリスト「tmp」に1を入れておきます。パスカルの三角形の各段は必ず1から始まるからです。
5行目:もしiが2以上ならばこのfor文を実行します。
6行目:リスト「tmp」に一つ前の段の、一つ前の順番の項と、一つ前の段の同じ順番の項の和を新たな項として追加します。for文でこれを繰り返します。
7行目:for文を抜けた後、一番最後の項としてtmpに1を追加します。もしiが1の場合は4行目から7行目に処理が飛ぶので、tmpは[1,1]になります。
8行目:出来上がったパスカルの三角形のi段目であるtmpを本体のリストの「a」に追加します。
9,10行目:aを1段ずつfor文で出力します。
コード例2
ネットで見つけた再帰関数を使ったコード例です。
参考:https://qiita.com/zaq9/items/8348d1c9296643430fff
def c(n,k):
if(k<=0 or n<=k):
return 1
else:
return(c(n-1, k-1) + c(n-1, k))
N=int(input())
for i in range(N):
print([c(i,j) for j in range(i+1)])