ブルーノのC#プログラミング & unity勉強日記

プログラミング素人、ブルーノの自主勉強ノートです。他のプログラミングを勉強したい方の助けになれば幸いです。その他趣味の雑記もしていきたいです

メソッドの再帰呼び出しについて

みなさんこんにちは

「疲れる」ってムダ機能じゃね?って最近思い始めたブルーノです。一日中疲れない体が欲しいなあ。さて今回はメソッドの再帰呼び出しというものについてまとめたいと思います。

 

メソッドの再帰呼び出しとは?

メソッドを書く際、その中で自らのメソッド自身を呼び出すことができます。

例)

public int method()

{

   .....;

   method();

   ......;

}

メソッドという名前のメソッド内で自らを呼び出しています。しかし単純にこう書いてしますといつまでたってもこのメソッドは終わらなくなってしまうため、終了させる工夫が必要になってきます。そこで今回は有名な再帰呼び出しの例として階乗の計算とフィボナッチ数列を紹介します。 

 

階乗の計算

階乗の計算とは、「n!」で表される特定の数nとそれ以下の全ての整数の積の計算のことですね。

例)5! = 5 × 4 × 3 × 2 × 1 = 120

これを再帰呼び出しを使って求めてみます。

f:id:covory10101101276:20170605160959p:imagef:id:covory10101101276:20170605161007p:image

CalcKaijoメソッドの中、13行目で自身であるCalcKaijoメソッドを呼び出しています。このメソッドの引数は与えられたnよりも1小さい数字になっています。ここがミソになっており、メソッドを呼び出すたびにこの再起呼び出しの方のCalcKaijoは1小さくなります。そのおかげでもしnが0になれば11行目で引っかかり、再帰呼び出しが終了する仕組みになっています。このように同じものを引き出すギミックを仕込む場合は当然ですがそのループを抜け出す工夫をしなければなりません。

f:id:covory10101101276:20170609135506j:image

 

同じような再帰呼び出しの例として、フィボナッチ数列というものも紹介しておきます。

 

フィボナッチ数列とは?

イタリアの数学者のフィボナッチさんが発見した数列で以下のような定義があります。

F1 = 1, F2 = 1,

nが3以上の時、Fn = Fn-1 + Fn-2

 つまり具体的に書くとこのようになります

F1 = 1

F2 = 1

F3 = F2 + F1 = 2

F4 = F3 + F2 = 3

F5 = F4 + F3 = 5

F6 = F5 + F4 = 8

.....

F3以降の式は再帰呼び出しを用いることで再現できます。実際にそれっぽく起こしてみましょう。

f:id:covory10101101276:20170807151857p:plain

f:id:covory10101101276:20170807151905p:plain

 

 F1とF2はそのまま式に当てはめちゃうと値がマイナスになって変なことになるのでコンティニューで飛ばし、先に書いておきました。今回はここまでとします。

 

大学生活の中では楽しいことも苦しいこともあるんですが自分から動くと結構楽しいことがあるんですねこれが(笑)ここ最近こそテストやらレポートやらで忙しかったですがこれからもどんどん書いていきたいと思います。早速台風には見舞われてますが、プログラミングは屋内でカタカタできるので楽で良いですね。宇宙兄弟おもしれー