再帰アルゴリズム その1

Java

再帰アルゴリズムについてちょっとしたメモを残しておきます。

まず再帰とは、あるものについて記述する際に、記述しているものそれ自身への参照が、その記述中にあらわれることをいうらしいです。

日本語って難しいですね。

プログラムを組む上でコーディングテクニックについては自分と同じ(自分自身)をある条件が満たされるまで呼び出し続けることのようです。

これって for 文もしくは while 文でもいけそうですね。

とりあえず非効率的かつ非現実的ではありますが 3 の階乗値を求めるプログラムを作ってみましょう。

 

jp.yucchi.recursion.example.RecursionExample.java

非常にシンプルです。

10 行目の標準出力処理の中にある fact(TARGET) メソッドで再帰メソッドを呼び出してます。

再帰メソッドが 13 行目の fact(int n) です。

14 行目から条件次第で再び呼び出されます。

全ての処理が帰ってきてから標準出力に fact(TARGET) の戻り値が出力されます。

これだったらループ文でも大差ないだろうと思った あ・な・た 正解です。(^_^;

しかし、この再帰アルゴリズムは奥が深いんです。

そのことはまた今度ってことで今回はこのシンプルなプログラムの流れをデバッガを使い確認してみます。

上記のプログラムのままでもいいのですが、ちょっと解りやすくするために下記のように変更します。

 

jp.yucchi.recursion.example.RecursionExample.java

それではプログラムの流れを変数 n , temp を確認しながらご覧ください。

どうですか?

処理が最初の呼び出し元に戻るまで追うことができましたでしょうか?

コードはすっきりとなってるけどプログラムの流れはけっこう追っていくのは大変です。

論理的に考えて組んでしまえばこのかったるい処理はコンピューターがやってくれるので非常に便利です。

今回は再帰アルゴリズムの基本中の基本のメモでした。

Hatena タグ:

A HAPPY NEW YEAR 2013

General

あけましておめでとうございます。

どうか本年も暖かい、もしくは生暖かい目で見守ってください。(^_^)

2013年はクラウディアさんと、ひときわ光り輝いている巨人の星をめざします。(ヲヒ

50_001

これだけだとさみしいので翻訳ソフトで英語にしてみた。

I congratulate you opening.

Please watch by a warm or lukewarm eye if you please this year also. (^_^)

I will aim at the star of the giant who is shining particularly with Claudia in 2013. (ヲヒ)