検索

キーワード


【Java】ハンズオンセミナー用コード解説 トレーニング7 再帰について

  • 公開日:2020-07-16 08:06:12
  • 最終更新日:2020-11-13 21:50:14
【Java】ハンズオンセミナー用コード解説 トレーニング7 再帰について

こんにちは、駆け出しプログラマーの松倉です!

ここでは、eclipceを使ってコーディングする場合のハンズオンセミナー用コード”再帰”について紹介・解説します。

プログラミング未経験の方、Javaについて勉強している方、これから勉強したいと思っている方の参考になれば幸いです! 



再帰  

再帰処理

再帰とはメソッドを使ったテクニックで、繰り返し計算をする方法です。

for文などのループ処理とは異なり、再帰はメソッドからそのメソッド自身を呼び出す処理です。

再帰では、適切な終了条件を用意しておくことが重要であり、それがない場合は無限ループのような処理を行います。


再帰処理を使うメリットとして、複雑になる処理を簡潔に書くことができること。

また見た目的にも分かりやすいコードになるということが挙げられます。

しかし再帰にはどちらかと言えばメリットよりデメリットが多いため、慣れるまでは使い方に注意が必要です。

 

それでは実際に再帰処理を書いてみましょう!

public class RecursiveCall {
	public static void main(String[] args) {
		int target = 10;
		int result = calcSumFromOne(target);
		//変数内容表示
		System.out.println("1 から " + target + " までの和:" + result);
	}

	//実行処理
	private static int calcSumFromOne(int target) {
		if (target <= 1) {// 終了判定
			return target;
		} 
     // 再帰処理
		return target + calcSumFromOne(target - 1);
	}
}

必ず終了判定が記述されているか確認します。

確認出来たら実際にコンソールに表示してみましょう!


実行結果:

1 から 10 までの和:55

同じ結果がコンソールに表示されていれば成功です。


イメージが付きやすいように再帰処理の動きを図で見てみましょう。

再帰処理のイメージ

この処理では target メソッドの中で target メソッドを再度呼び出しています。

その際に渡ってきた引数の target と再度呼び出した target メソッドの引数から1引いた値を渡しています。

終了条件により target が<=1になると処理を終了します。

計算の流れ

10 + 9 ++ 3 + 2 + 1

計算の流れは上記のように、結果として 55という値がコンソールに出力されます。


再帰により自身を何度も呼び出している動きがイメージできましたか?

for文のループ処理とは違うことを理解しましょう。




まとめ

ここまでの学習が再帰の話でした。

再帰処理は for文のループ処理と似ていて使い分けが難しいと思います。

また適切な終了条件を記述しない場合は無限ループとなるため注意して実装しましょう。

javaの基礎について興味がある場合はほかの記事も見て勉強してくださいね。   



【著者】

松倉祥大

はじめまして。フォワードソフト株式会社の松倉です。
システムエンジニアとして働き始めたのが2020年4月です。経験や知識がない状態で入社した私は、フォワードソフトの教育研修で一からプログラミングの勉強をしました。教育研修を卒業後、Javaのプログラミングについて初学者向けの記事を共同で制作しています。
知識や経験はまだまだですが、これからいろんな職場で様々な経験しながら勉強していきたいと思っています。

よく読まれている記事
【Java】JSPでタグライブラリを使う(JSTL)

【Java】JSPでタグライブラリを使う(JSTL)

こんにちは。エンジニアの新田です!ここでは、システムエンジニアとして働いている私が、システム開発手法や開発言語について紹介していこうと思います。今回は、JSPの標準タグライブラリ「JSTL」について紹介します。Javaについて勉強している方、Webアプリケーションを構築したいと思っている方の参考になれば幸いです!関連記事リンク: 【Java】JSPの基本的な構文/【Java】JSPのアクションタグ

【Java】Stringクラス文字列を操作するメソッドの使い方まとめ!実例も紹介!

【Java】Stringクラス文字列を操作するメソッドの使い方まとめ!実例も紹介!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!そもそもStringとは何?『 String 』... Java言語において文字列のデータ型を指します。基本デ

【Java】文字列の置き換え(String#format)!エスケープシーケンスのまとめも!!

【Java】文字列の置き換え(String#format)!エスケープシーケンスのまとめも!!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!Stringクラスformatメソッドの文字列整形【java.utilパッケージ】Formatterクラスfo

【Java】文字列格納後に変更可能!?StringBufferクラスとStringBuilderクラス!

【Java】文字列格納後に変更可能!?StringBufferクラスとStringBuilderクラス!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者にも✅、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!文字列を扱う3つのクラス【java.langパッケージ】java.langパッケージの文字列を扱うクラスにはS

【Java】値?変数?型??しっかり解説!『データ型(プリミティブ型と参照型)』

【Java】値?変数?型??しっかり解説!『データ型(プリミティブ型と参照型)』

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!プリミティブ型と参照型プログラム開発では型を持った変数を使ってデータのやり取りをしますが、データ型によって仕様