同じ処理を何回も書きたくない場合、for文やwhile文を使うと便利です。
しかし、実はfor文やwhile文を使用しなくても繰り返し処理を書くことができます!
早速サンプルをご紹介します。
■RecursionSample_01.java
public class RecursionSample_01 { public static void main(String[] args) { int num = 10; RecursionSample_01 obj = new RecursionSample_01(); System.out.println("1から" + num + "までの総和 : " + obj.sum(num)); } int sum(int num) { if(num != 1) { return num + sum(num - 1); } else { return 1; } } }
■実行結果
「55」
1から10までの総和を求めるプログラムです。
通常でしたらfor文やwhile文を使って書くところなのですが、この通り使わなくても繰り返し処理ができるのです!
ではどのように繰り返しをしているのかというと、sumメソッドの中でsumメソッドを呼び出しています。
さらにその呼び出されたsumメソッドがまたsumメソッドを呼び出す。
これで繰り返しができるわけです。
このようにメソッドの中でメソッドを呼び出すことを再帰といいます。
ではもう一つ再帰のサンプルをみてみましょう!
■RecursionSample_02.java
import java.util.InputMismatchException; import java.util.Scanner; public class RecursionSample_02 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); try { System.out.print("整数値 : "); int inputNum = sc.nextInt(); if (inputNum % 5 == 0) { System.out.println("5で割り切れます"); } else { System.out.println("5で割り切れません"); } } catch (InputMismatchException e) { System.out.println("整数でない値が入力されました"); main(args); // mainメソッドの最初に戻る } } }
■実行結果
9行目でキーボードで入力された値をint型として読み取ろうとしています。
もしint型でない値が入力された場合はjava.util.InputMismatchExceptionという例外がスローされます。
InputMismatchExceptionをキャッチしたらエラーメッセージを出力したあとでmainメソッドが呼ばれています。
すると、また入力に戻ることができます!