ホームページ >Java >&#&チュートリアル >Java における再帰と反復の違いは何ですか?
エンティティ がそれ自身を
と呼ぶとき、プログラムは recursive
と呼ばれます。
ループ (または繰り返し)
がある場合、プログラムは 反復呼び出し
と呼ばれます。
これらの手法のいずれを使用するかは、時間の複雑さとコード サイズのトレードオフになります。オフ。
再帰には、反復と比較して多くのオーバーヘッドがあります。
同じ関数への繰り返しの呼び出しが原因です。、
コードの時間計算量は何倍にも増加しました。
再帰での無限繰り返し
##定義 | 関数はそれ自体を呼び出します。 | |
---|---|---|
#関数に | を適用します。 | For ループ。 |
終了 | 基本的なケースでは、ここでは関数呼び出しは行われません。 | 反復子の終了条件が満たされなくなったとき。 |
使用法 | コード サイズを小さくする必要があり、時間の複雑さが問題にならない場合に使用します。 | 時間の複雑さと拡張されたコード サイズのバランスをとる必要がある場合に使用します |
コード サイズ | コードの削減 | コードの増加 |
時間計算量 | 非常に高い (通常は指数関数的な) 時間計算量。 | 時間計算量は比較的低いです (通常は多項式対数)。 |
空間の複雑さ | 空間の複雑さは反復よりも高くなります。 | 空間の複雑さは低いです。 |
ヒープ | ここでのスタックは、関数が呼び出されたときにローカル変数を格納するために使用されます。 | スタックは使用しないでください。 |
速度 | スタックの維持と更新のオーバーヘッドがあるため、実行は遅くなります。 | 一般に、スタックを使用しないため、再帰よりも高速です。 |
ストレージ | 再帰では、反復と比較してより多くのメモリが使用されます。 | 反復中に関数呼び出しがないため、オーバーヘッドはありません。 |
関数呼び出しを繰り返すオーバーヘッドがあります。 | 反復中に関数呼び出しがないため、オーバーヘッドはありません。 | |
再帰関数が終了条件を満たしていないか、未定義であるか、基本ケースに到達しない場合、スタック オーバーフロー エラーが発生し、システムが無限に実行される可能性があります。再帰でクラッシュします。 | 繰り返しステートメントの制御条件が false にならない場合、または制御変数が終端値に到達しない場合、無限ループが発生します。無限ループでは、CPU サイクルが何度も使用されます。 | |
2.コード |
以上がJava における再帰と反復の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。