Javaの再帰アルゴリズムについて詳しく皆さんに解説していただきたいと思います。
Javaの再帰アルゴリズムについて詳しく教えていただきたいです
パブリック クラス テスト{
public static int getResult(int パラメータ) {
if (パラメータ == 0) { 結果を返します。 } それ以外 { 結果 *= パラメータ; return recursiveFunction(パラメータ - 1, 結果); }
戻り番号;
}
public static void main(String[] args) { //ここにコードを書きます }
int result = result(5);
System.out.println(結果);
}
}
その実行原理は次のとおりです:
result(5) まず、パラメータが1以下かどうかを判定する関数本体を入力しますが、このときパラメータは5で条件は成立しませんので、parameter*result(parameter-1)を実行します。 、つまり 5 * result(5-1)、プログラムを繰り返し実行します...
5*結果(5-1)
4*結果(4-1)
3*結果(3-1)
2 * result(2 - 1) この時点で、パラメータは 1 に等しく、条件を満たしているため、関数は 1 を返し、レイヤーごとに返します。今すぐ:###
結果(1) =12*結果(1)=2*1=2
3*結果(2)=3*2=6
4*結果(3)=4*6=24
5*結果(4)=5*24=120
Java の再帰的メソッドを使用して、n 個の数値を重複なく完全に配置します n 3
プログラムは次のとおりです。入力形式は次のとおりです。
5
3 1 2 1 2 は、最初の行が数字であることを意味し、次に入力する数字の数を示します。 2 行目には、並べ替える数値を表す n 個の数値が含まれています。入力では、並べ替える数値がすべて非負の数値であると想定しています。
java.io.ファイルをインポート;
import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.Scanner;
パブリック クラス メイン {
静的最終 int maxn = 1000;
int n; //配列要素の数
int[] a; // 配列
boolean[] used; // 要素が再帰プロセス中に使用されたかどうかをマークするために使用される補助変数、used[i] は i 番目の要素が使用されたかどうかを示します
int[] cur; //現在の配置番号を保存
// 配置全体を重複せずに再帰的に印刷し、現在 idx 位置まで印刷します
void print_comb(int idx) {
idx == n の場合、最後の要素が走査され、cur を出力できることを意味します。
for(int i = 0; i if(i > 0) System.out.print(" ");
System.out.print(cur[i]);
}
System.out.println();
}
int last = -1; // 重複を避けるために、last 変数を使用して最後の検索の値を記録します
for(int i = 0; i if(used[i]) 続行;
if(last == -1 || a[i] != last) { // 現在の数値が繰り返されず、使用されていない場合にのみ、再帰が続行されます
last = a[i];
cur[idx] = a[i];
// バックトラッキング方法
used[i] = true;
print_comb(idx 1);
used[i] = false;
}
}
}
public void go() が FileNotFoundException をスローする { // メソッド本体を実装する }
{
Scanner in = new Scanner(new File("data.in")); 構文は、in という名前の Scanner オブジェクトを作成し、data.in という名前のファイルから入力を読み取るために使用します。
//データを読み取り、並べ替えます
n = in.nextInt();
a = 新しい int[n];
for (int i = 0; i Arrays.sort(a);
//補助変数を初期化し、重複のない完全な配置を開始します
cur = 新しい int[n];
used = 新しいブール値[n];
for(int i = 0; i print_comb(0);
in.close();
}
public static void main(String[] args) throws FileNotFoundException { これは Java プログラムの主要なメソッドであり、プログラム エントリを開始するために使用されます。このメソッドでは、ファイルの読み取り、データの処理などのいくつかの操作を実行できます。 このうち、throws FileNotFoundException は、実行中にファイルが見つからない例外が発生する可能性があることを示しており、この例外が発生した場合、プログラムは FileNotFoundException 例外をスローします。 このメソッドでは、ファイルの読み取りと例外処理を処理する特定のコード ロジックを作成できます。
new Main().go();
}
}客観的に言えば、非再帰的かつ非繰り返しの完全な置換は比較的単純で効率的です。
Java における再帰の役割は何ですか?再帰を使用する理由
あなたの 2 つの質問は、実際には 1 つの質問ですよね?
再帰の役割: 再帰アルゴリズムは、再帰によって定義されるいくつかの問題を解決できます。
まず第一に、再帰定義の問題が何であるかを理解する必要があります。簡単に言うと、再帰的に定義された問題は、同じ構造でサイズが小さい小さな問題を含む大きな問題です。
たとえば、n 階乗の定義は次のように理解できます:
n!= n*(n-1)!
上記の分析から、(n-1)! は n! よりも小さい問題であると結論付けるのは難しくありません。この方法に従って問題を継続的に分解することにより、いくつかの基本的な既知のデータを得ることができます。次に、逆導出を通じて、最終結果を得ることができます。
n の階乗アルゴリズムは次のとおりです:
private static int jieCheng(int n) { これは階乗を計算する方法であり、パラメーター n は計算される値を表します。詳細な説明は次のとおりです。 - 「プライベート」とは、メソッドが現在のクラスでのみ表示され、他のクラスからアクセスできないことを意味します。 - 「静的」は、メソッドが静的メソッドであり、オブジェクトをインスタンス化せずにクラス名を通じて直接呼び出すことができることを意味します。 - 「int」は、メソッドが結果として整数値を返すことを意味します。 - 「jieCheng」はメソッドの名前で、必要に応じて名前を付けることができます。
if(n == 1)
1を返す;
###それ以外 {###n*jieCheng(n-1) を返す;
}
}
さらに、バイナリ ツリーの定義も再帰的です。つまり、多くのバイナリ ツリー操作が再帰によって実装されます。
再帰を使用すると、プログラムが非常に簡潔になります。
Java での再帰的アプリケーション! f20 1 f21 4 fn 2 2 fn 1 fnwhere
1
2
3
4
5
6
###7###8
9
10
11
12
13
14
15
16
17
パブリッククラステスト {
publicstaticintf(intn){
if(n==20){
return1;
}エルセイフ(n==21){
戻り4;
}elseif(n
returnf(n 2)-2*f(n 1);
###}それ以外{###return2*f(n-1) f(n-2);
}
}
public static void main(String[] args) {
System.out.println(f(10)); //f(10)の値を出力します
}
}
テスト済みです。main 関数に f(n) を入力します (n は手動で調整されたパラメーターです)。対応する出力結果が得られます。
以上がJavaの再帰アルゴリズムについて詳しく皆さんに解説していただきたいと思います。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

HP SmartがWindows 11/10/サーバーに自動的にインストールされた場合はどうなりますか? Microsoftはユーティリティをリリースしており、KB5034510:Microsoft Printer Metadataトラブルシューターツールをオンラインで入手して、自動インストールバグを修正できます。このphp.cn投稿を読み続けて見つけてください

netwlv64.sysブルースクリーンは、Windows 11/10オペレーティングシステムを起動しようとする場合、一般的なエラーです。このBSODの問題を修正して、PCを適切に機能させるにはどうすればよいですか?この投稿では、php.cnによって収集されたいくつかの有用なソリューションを見つけることができます。

Windowsのサイズ変更は、同時に複数のプログラムを実行する場合に役立ちます。あなたのほとんどは、毎日のコンピューターの使用でWindowsのサイズを変更しようとしたに違いありません。このPHP.CN投稿は、ウィンドウのサイズを変更する方法を説明するために、いくつかの便利な方法をコンパイルします。

Windows 10/11のローカルアカウントのセキュリティ質問を無効にする方法をお探しですか? PHP.CNからのこの投稿では、ローカルグループポリシーエディターとレジストリを介してローカルアカウントのセキュリティ質問の使用を防ぐ方法を説明します

Windows 11 Insider Preview Build 23486は、パスワード使用エクスペリエンスを向上させるために、新しい機能であるPassKey設定を提案すると発表しました。コンピューターに新しいPasskeyを作成して追加したり、削除したりできます。このphp.cnポストはあなたを歩きます

OneDriveにログインしようとすると、「OneDriveがあなたに署名する問題がありました」エラーに苦しんでいますか? PHP.CNからのこの投稿では、このOneDriveサインインの問題を解決する方法について説明します。

Windows 11とWindows 10のデスクトップアイコンは重複していますか? PHP.CNからのこの投稿では、このWindowsデスクトップアイコンのバグを取り除くのに役立ついくつかの便利なソリューションを提供します。

OneDriveは、同じOneDriveアイコンを備えたファイルエクスプローラーのフォルダーを2回表示します。これは、OneDriveで発生するいくつかのバグです。ファイルエクスプローラーの2つのOneDriveフォルダーの状況を修正するための効果的な方法を使用できます。 PHP.CNに関するこの投稿が役立ちます


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。
