Python で実装するパスカルの三角形

任意の行数までのパスカルの三角形(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)])
問題: かなりのひっかけ問題で、私はまんまと引っかかってしまいました。よくできた問題だと思います。 コード例 たったこれ...