Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaで再帰を使用する方法

プログラミングでは、再帰とは、関数が直接または間接的にそれ自体を呼び出すプロセスを指します。再帰は、コンピュータサイエンスの多くの問題を解決するために使用されます。

Javaプログラミング言語は、それ自体を呼び出すメソッドである再帰メソッドの作成をサポートしています。

このチュートリアルでは、例を参照して、再帰がどのように機能するか、およびJavaで再帰関数を作成する方法について説明します。このガイドを読むと、Javaで再帰メソッドを作成するエキスパートになります。

Javaメソッド

関数と呼ばれることもあるメソッドは、特定のタスクを実行するコードのブロックです。たとえば、メソッドを使用して、値の配列の合計を計算したり、配列の内容をコンソールに出力したりできます。

Javaのメソッドの構文は次のとおりです。

modifier static returnType methodName (Parameters) {
	// Method body
}

たとえば、「水曜日です!」という文を出力するメソッドを作成するとします。週の半ばです!」コンソールに。次のコードを使用してこれを行うことができます。

class Main {
public static void printItsWednesday() {
	System.out.println("It's Wednesday! We're half-way through the week!");
}

public static void main(String[] args) {
	printItsWednesday();
}
}

printItsWednesday()を使用してこのメ​​ソッドを呼び出す場合 、以下が返されます。

水曜日です!週の半ばです!

参加者の81%は、ブートキャンプに参加した後、自分たちの技術的な仕事の見通しについてより自信を持っていると述べました。今日のブートキャンプにマッチしましょう。

平均的なブートキャンプの卒業生は、ブートキャンプの開始から最初の仕事を見つけるまで、キャリアの移行に6か月も費やしませんでした。

Javaメソッドの詳細に興味がある場合は、Javaのメソッドに関する完全なガイドをここで読むことができます。

上記の例では、prinItsWednesday() を呼び出します。 メインプログラムのメソッド。ただし、メソッド自体でメソッドを呼び出すと、再帰メソッドが作成されます。

Java再帰

再帰メソッドは、最初にメインメソッド内で呼び出され、次にメソッド自体の中で呼び出されるメソッドです。再帰メソッドの構文は次のとおりです。

static void executeMethod() {
	// Code here
	executeMethod(); // This is our recursive call
	// Code here
}

public static void main(String[] args) {
	executeMethod(); // This is the normal method call
}

プログラムを実行すると、executeMethod() メソッドはメインプログラムで呼び出されます。これにより、executeMethod() のコードが発生します 実行するメソッド。この場合、executeMethod() が含まれます。 方法。したがって、プログラムを実行すると、ループに入ります。

プログラムは引き続きexecuteMethod() を実行します 続行できない条件が満たされるまでメソッド。再帰を停止する可能性のある条件が指定されていない場合、プログラムは永久に実行されます。これは、無限再帰と呼ばれます。

なぜ再帰を使用する必要がありますか?まず、再帰により、特定の場合にプログラムの時間計算量を減らすことができます。第2に、再帰を使用すると、いくつかのアルゴリズムをより読みやすく保守しやすい方法で簡単に実装できます。

再帰を使用して作成されることが多いプログラムの例を次に示します。

  • フィボナッチ数列の計算
  • 文字列を逆にする
  • 数値の階乗を計算する
  • 二分木の高さの計算

とはいえ、再帰は、タスクを実行するための標準的なメソッドを作成するよりも遅くなる可能性があります。これは、再帰メソッドが実行されるたびに、再帰によって変数の新しい格納場所が作成されるためです。

Java再帰の例

Javaで再帰がどのように機能するかを示すために、2つの例を見ていきましょう。

再帰を使用して文字列を反転する

中学校の教師向けに、年間を通じて各生徒の成績を逆にするプログラムを作成しているとします。文字列は、生徒が受け取った1年生から始まり、生徒が獲得した最新の成績で終わります。文字列を逆にして、生徒が獲得した最後の、または最新の成績が文字列の最初になるようにします。

次のコードを使用して、文字列を逆にすることができます。

public class ReverseGrades {
	public static String reverse(String grades) {
		if (grades.isEmpty())
			return grades;
		return reverse(grades.substring(1)) + grades.charAt(0);
	}

	public static void main(String[] args) {
		String grades = "CBCBAABACAABA";
		String reverse_grades = reverse(grades);

		System.out.println("This student's grades for the year are: " + reverse_grades);
	}
}

私たちのコードは次を返します:

この生徒の年間の成績は次のとおりです。ABAACABAABCBC

ご覧のとおり、プログラムによって文字列の内容が逆になっています。このプログラムでは、reverse()という再帰関数を作成しました。 。

reverse()の場合 関数が実行されたら、最初に成績文字列が空かどうかを確認します。そうである場合は、成績のリストをメインプログラムに戻します。 reverse()であるため、これにより再帰が停止します。 関数の最後の呼び出しには、実行する機会が与えられていません。

成績文字列が空でない場合、プログラムはreverse()を実行します メソッドを再度実行し、関数の結果を文の最初の文字に連結します。 charAt()を使用します この例のメソッドは、文の最初の文字を取得し、それをreverse()の左側に追加します。 方法。

文字列が逆になったら、This student’s grades for the year are: 「」に続いて、学生の成績の逆の文字列がプログラムに返されます。

再帰を使用した階乗の計算

再帰が役立つもう1つの例は、数値の階乗を計算することです。

数学では、階乗は、乗算された数以下のすべての正の整数の積です。たとえば、5の階乗は5 * 4 * 3 * 2 * 1に等しく、120です。階乗の方法は反復計算を伴うため、再帰が問題の解決に役立つ可能性がある実際の良い例です。 。

次のJavaプログラムを使用すると、Javaで7の階乗を計算できます。

class Main {
	static int calculateFactorial(int number) {
		if (number != 0)
			return number * calculateFactorial(number-1);
		else
			return 1;
	}
	
	public static void main(String[] args) {
		int num = 7;
		int answer = calculateFactorial(num);
		System.out.println("The factorial of 7 is: " + answer);
	}
}

私たちのコードは次を返します:

The factorial of 7 is: 5040

この例では、calculateFactorial()というメソッドを作成します。 これは、numberパラメーターに格納されている数値に次のcalculateFactorial()の結果を掛けます。 方法。このプロセスは、numberパラメーターが0に等しくなるまで実行されます。

numberパラメーターが0に等しい場合、コードのifステートメントは1を返し、calculateFactorial()の結果を返します。 メソッドはメインプログラムに戻されます。

したがって、calculateFactorial() メソッドは7*6 * 5 * 4 * 3 * 2 * 1を実行し、メインプログラムに回答を返します。答えが計算されると、メッセージThe factorial of 7 is: 、続いてプログラムによって計算された回答がコンソールに出力されます。

結論

再帰は、それ自体を呼び出すメソッドを記述するために使用されるプログラミングの概念です。再帰的メソッドは、タスクを複数回繰り返し、そのタスクの前の反復の結果を現在の反復で使用する必要がある場合に役立ちます。

このチュートリアルでは、Javaでの再帰の基本と、再帰メソッドを作成する方法について説明しました。さらに、このチュートリアルでは、文字列の反転と階乗の計算に関連して、実際の再帰の2つの例について説明しました。

これで、プロのようにJavaで再帰メソッドを使用する準備が整いました。


  1. JavaMath.randomの使用方法

    Math.random() Java メソッドは、0.0〜1.0の疑似乱数を生成します。結果の乱数を乗算して0-1の範囲外の範囲を取得でき、結果は0になる可能性がありますが、常に1未満です。 プログラミングをしていると、乱数を生成する必要がある場合がよくあります。たとえば、クルーズラインを運営しているとします。顧客の注文の最後に追加され、予約の参照として使用される乱数を生成することをお勧めします。または、推測ゲーム用に乱数を生成することもできます。 Javaには、乱数を生成するために使用できるいくつかの方法があります。 このチュートリアルでは、Javaで乱数を生成するために使用

  2. Brewを使用してMacにJavaをインストールする方法

    Macには複数のバージョンのJavaを搭載できます。 この記事では、Homebrewを使用してMacにJavaをインストールする方法と、Java8、Java11、Java13、最新のJavaバージョンなどの異なるバージョンを切り替える方法を示します。 前提条件 始める前に、MacにHomebrewがインストールされていることを確認してください。そうでない場合は、次の方法でインストールできます: $ ruby -e $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install) 次に、Home