パスカルの三角形

パスカルの三角形が最近はやっているらしい。
身内の間で。厳密には約二名(課長と係長)の間で。
ことの発端は魔術師本に出てる問題。
先に答えを見てしまっているからだろうけど
考え方をまとめてみた。

パスカルの三角形とは

三角形の辺上の数はすべて1、三角形の内部の数はその上の二つの数の和。
   1
  1 1
 1 2 1
1 3 3 1

こんなやつ。

もうすこしわかりやすくしてみよう

実は三角形って名前と図がピラミってる(ピラミッド状になっている)
ことに惑わされることに気がついた。
なので、これを全部左に寄せてみる。


11
121
1331

こうするとなんとなく法則性が見えてくる気がする。
その法則性は、

  1. (左から数えて)先頭列は無条件で1になる
  2. (左から数えて)最後の列は1になる
  3. 上記以外は、その数の1行上 + 1行上の1列前(左)

2番目はその行と同じ列と等しい(これには気がつかなかった)
これを満たすようにつくればいいわけだな。

結局

答えは、id:kanouk課長がRubyで出したのだが、
(というか盛り上がりきったところで、この盛り上がりに気がついたorz)
JavaScriptで書き換えたのを載せとく。

function pascal(depth, order){
   return (order == 1 || order == depth) ?
              1 : pascal(depth - 1, order - 1) +  pascal(depth - 1,   order);
}