「 n 段ある階段を 1 段ずつ または 1 段飛ばし で昇るとき、 何通りの昇り方があるか? n = 1 〜 15 についてそれぞれ答えなさい。」 いう問題の解答は、 答えを f(n) 通り とすると、 フィボナッチ数列の漸化式 f(n) = f(n−1) + f(n−2) が成立することを利用します 。 では、 この問題に「 連続して 1 段飛ばしをしてはならない 」という条件を加えると、 どうなるでしょう?
n 段の階段を昇り切る 1 つ前は、 第 (n−1) 段目にいるか 第 (n−2) 段目にいるか の 2つに 1 つです。
n 段の階段を昇り切る 1 つ前に第 (n−1) 段目にいる場合 :
第 (n−1) 段目にいることになるすべての場合の数は f(n−1) 通りです。
このすべてのケースについて、 次に n 段の階段を昇り切ることになる権利があります。
したがって、「 n 段の階段を昇り切る 1 つ前に第 (n−1) 段目にいる場合 」の「 n 段の階段を昇り切るすべての場合の数 」は f(n−1) 通りです。
この 1 つ前は必ず第 (n−3) 段目にいます。
第 (n−3) 段目にいることになるすべての場合の数は f(n−3) 通りです。
したがって、「 n 段の階段を昇り切る 1 つ前に第 (n−2) 段目にいる場合 」の「 n 段の階段を昇り切るすべての場合の数 」は f(n−3) 通りです。
f(n) = f(n−1) + f(n−3)
そこで、 JavaScript で次のようなプログラム組んで実行し、 答えを求めます。
確率 へ戻る