パスカルの三角形を再帰関数で書いてみる
〈パスカルの三角形〉を書けば $${(a+b)^n}$$ の展開式の係数を簡単に求めることができます。パスカルの三角形の書き方は、
○ 各段両端は 1 ・・・(1)
○ 上段の2数の和を、2数の真ん中下段に書く ・・・(2)
○ これを繰り返す ・・・(3)
これだけです。上から $${n}$$ 段目の数が $${(a+b)^n}$$ の展開式の各項の係数というわけです。
また $${(a+b)^n}$$ の展開式の $${a^{n-r}b^r}$$ の係数は、組合せ $${\textup{C}}$$ を使って $${_n \textup{C} _r}$$ と表せます〈二項定理〉。これを使えば、上の(1)と(2)は次のように書けます。
○ $${_n \textup{C} _0=1}$$ , $${_n \textup{C} _n=1}$$ ・・・(1)
○ $${_n \textup{C} _r = _{n-1} \textup{C} _{r-1}+ _{n-1} \textup{C} _r}$$ ・・・(2)
さらに、上の(3)「繰り返す」をプログラミングのコードで書くのに適しているのは、再帰関数です。というわけで、Pythonで組んでみました。
def c(n,r):
if (r==0)or(n==r):
return 1
return c(n-1,r-1)+c(n-1,r)
n=int(input())
r=int(input())
print(c(n,r))
コードの1〜4行目で関数 c(n,r) を定義しています。2〜3行目が上の(1)に、4行目が上の(2)に当たります。
コードの5行目以降がプログラム本体で、ここで表示(print)するものは、パスカルの三角形の上から $${n}$$ 段目、左から $${r}$$ 番目の値でもありますし、組合せ $${_n \textup{C} _r}$$ の値でもあります。
また、プログラム本体部分で次のように for 文で1回転させれば「パスカルの三角形の $${n}$$ 段目」すなわち「$${(a+b)^n}$$ の展開式の係数」を順に表示できます。
n=int(input())
for r inrange(n+1):
print(c(n,r),end=" ")
さらに、プログラム本体部分で次のように for 文の2重ループで回せば「パスカルの三角形の1段目から $${n}$$ 段目まで」すなわち「パスカルの三角形の全体像」を表示できます。
m=int(input())
for n in range(m+1):
for r in range(n+1):
print(c(n,r),end=" ")
print()
お試しください。