Java における再帰と反復の違いは何ですか?
1. 再帰と反復の違い
エンティティ
がそれ自身を
と呼ぶとき、プログラムはrecursive
と呼ばれます。ループ (または繰り返し)
がある場合、プログラムは反復呼び出し
と呼ばれます。- #例: 数値の階乗を求めるプログラム
- ##再帰を見つける時間の計算量は、反復の時間計算量よりも困難です。
- : 再帰の時間計算量は、前の呼び出しに基づいて n 番目の再帰呼び出しの値を見つけることでわかります。したがって、基本ケースに基づいてターゲットケースを見つけ、それを基本ケースに基づいて解くことで、再帰方程式の時間計算量を理解することができます。
- : 反復の時間計算量は、ループ内で繰り返されるループの数を見つけることでわかります。
これらの手法のいずれを使用するかは、時間の複雑さとコード サイズのトレードオフになります。オフ。
- 時間の計算量が重視され、再帰呼び出しの数が多くなる場合は、反復を使用するのが最善です。
- ただし、時間の複雑さが問題ではなく、コードの短さが問題になる場合は、再帰が最適な方法になります。
- 再帰: 再帰には同じ関数を再度呼び出すことが含まれるため、コードの長さは非常に短くなります。ただし、分析で確認したように、再帰呼び出しの数が大量になると、再帰の時間計算量が指数関数的に増大する可能性があります。したがって、再帰の使用はコードを短くする場合に有利ですが、時間の複雑さは高くなります。
- 反復: 反復とは、コードのブロックを繰り返すことです。これには大量のコードが必要ですが、時間の複雑さは通常、再帰よりも低くなります。
- オーバーヘッド
再帰には、反復と比較して多くのオーバーヘッドがあります。
- 再帰
- : 再帰には、繰り返しの関数呼び出しのオーバーヘッドがあります。つまり、
同じ関数への繰り返しの呼び出しが原因です。
反復、
コードの時間計算量は何倍にも増加しました。 : 反復にはそのようなオーバーヘッドは発生しません。 -
無限繰り返し
再帰での無限繰り返し
- は CPU クラッシュを引き起こしますが、実行中に反復の際、メモリが使い果たされると停止します。
-
Recursion : Recursion では、指定された基本条件のエラーにより無限の再帰呼び出しが発生する可能性があり、連続呼び出しが false になることはありません。システム CPU がクラッシュする可能性があります。 -
Iteration : イテレータの代入エラー、インクリメント エラー、または終了条件エラーによる無限反復は、無限ループとなり、システムに問題が発生する場合とそうでない場合があります。エラーになりますが、プログラムのそれ以降の実行は確実に停止されます。
##定義 | 関数はそれ自体を呼び出します。 | |
---|---|---|
#関数に | を適用します。 | For ループ。 |
終了 | 基本的なケースでは、ここでは関数呼び出しは行われません。 | 反復子の終了条件が満たされなくなったとき。 |
使用法 | コード サイズを小さくする必要があり、時間の複雑さが問題にならない場合に使用します。 | 時間の複雑さと拡張されたコード サイズのバランスをとる必要がある場合に使用します |
コード サイズ | コードの削減 | コードの増加 |
時間計算量 | 非常に高い (通常は指数関数的な) 時間計算量。 | 時間計算量は比較的低いです (通常は多項式対数)。 |
空間の複雑さ | 空間の複雑さは反復よりも高くなります。 | 空間の複雑さは低いです。 |
ヒープ | ここでのスタックは、関数が呼び出されたときにローカル変数を格納するために使用されます。 | スタックは使用しないでください。 |
速度 | スタックの維持と更新のオーバーヘッドがあるため、実行は遅くなります。 | 一般に、スタックを使用しないため、再帰よりも高速です。 |
ストレージ | 再帰では、反復と比較してより多くのメモリが使用されます。 | 反復中に関数呼び出しがないため、オーバーヘッドはありません。 |
関数呼び出しを繰り返すオーバーヘッドがあります。 | 反復中に関数呼び出しがないため、オーバーヘッドはありません。 | |
再帰関数が終了条件を満たしていないか、未定義であるか、基本ケースに到達しない場合、スタック オーバーフロー エラーが発生し、システムが無限に実行される可能性があります。再帰でクラッシュします。 | 繰り返しステートメントの制御条件が false にならない場合、または制御変数が終端値に到達しない場合、無限ループが発生します。無限ループでは、CPU サイクルが何度も使用されます。 | |
2.コード |
以上がJava における再帰と反復の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

Java は、初心者と経験豊富な開発者の両方が学習できる人気のあるプログラミング言語です。このチュートリアルは基本的な概念から始まり、高度なトピックに進みます。 Java Development Kit をインストールしたら、簡単な「Hello, World!」プログラムを作成してプログラミングを練習できます。コードを理解したら、コマンド プロンプトを使用してプログラムをコンパイルして実行すると、コンソールに「Hello, World!」と出力されます。 Java の学習はプログラミングの旅の始まりであり、習熟が深まるにつれて、より複雑なアプリケーションを作成できるようになります。
