見出し画像

パスカルの三角形を再帰関数で書いてみる

〈パスカルの三角形〉を書けば  $${(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()

 お試しください。


いいなと思ったら応援しよう!