目次
1. 再帰と反復の違い
ホームページ Java &#&チュートリアル Java における再帰と反復の違いは何ですか?

Java における再帰と反復の違いは何ですか?

May 02, 2023 pm 07:25 PM
java

1. 再帰と反復の違い

  • エンティティ がそれ自身を と呼ぶとき、プログラムは recursive と呼ばれます。

  • ループ (または繰り返し) がある場合、プログラムは 反復呼び出し と呼ばれます。

  • #例: 数値の階乗を求めるプログラム

## 時間計算量の比較

    ##再帰を見つける時間の計算量は、反復の時間計算量よりも困難です。
  • 再帰
  • : 再帰の時間計算量は、前の呼び出しに基づいて n 番目の再帰呼び出しの値を見つけることでわかります。したがって、基本ケースに基づいてターゲットケースを見つけ、それを基本ケースに基づいて解くことで、再帰方程式の時間計算量を理解することができます。

  • 反復
  • : 反復の時間計算量は、ループ内で繰り返されるループの数を見つけることでわかります。

  • 使用方法の比較

これらの手法のいずれを使用するかは、時間の複雑さとコード サイズのトレードオフになります。オフ。
  • 時間の計算量が重視され、再帰呼び出しの数が多くなる場合は、反復を使用するのが最善です。
  • ただし、時間の複雑さが問題ではなく、コードの短さが問題になる場合は、再帰が最適な方法になります。
  • 再帰: 再帰には同じ関数を再度呼び出すことが含まれるため、コードの長さは非常に短くなります。ただし、分析で確認したように、再帰呼び出しの数が大量になると、再帰の時間計算量が指数関数的に増大する可能性があります。したがって、再帰の使用はコードを短くする場合に有利ですが、時間の複雑さは高くなります。
  • 反復: 反復とは、コードのブロックを繰り返すことです。これには大量のコードが必要ですが、時間の複雑さは通常、再帰よりも低くなります。
  • オーバーヘッド

再帰には、反復と比較して多くのオーバーヘッドがあります。
  • 再帰
  • : 再帰には、繰り返しの関数呼び出しのオーバーヘッドがあります。つまり、

    同じ関数への繰り返しの呼び出しが原因です。コードの時間計算量は何倍にも増加しました。

    反復
  • : 反復にはそのようなオーバーヘッドは発生しません。
  • 無限繰り返し

再帰での無限繰り返し
    は CPU クラッシュを引き起こしますが、実行中に反復の際、メモリが使い果たされると停止します。
  • Recursion
  • : Recursion では、指定された基本条件のエラーにより無限の再帰呼び出しが発生する可能性があり、連続呼び出しが false になることはありません。システム CPU がクラッシュする可能性があります。
  • Iteration
  • : イテレータの代入エラー、インクリメント エラー、または終了条件エラーによる無限反復は、無限ループとなり、システムに問題が発生する場合とそうでない場合があります。エラーになりますが、プログラムのそれ以降の実行は確実に停止されます。
再帰#反復##定義関数はそれ自体を呼び出します。 繰り返し実行される一連の命令。 #Elevated関数呼び出しを繰り返すオーバーヘッドがあります。 反復中に関数呼び出しがないため、オーバーヘッドはありません。 無限繰り返し再帰関数が終了条件を満たしていないか、未定義であるか、基本ケースに到達しない場合、スタック オーバーフロー エラーが発生し、システムが無限に実行される可能性があります。再帰でクラッシュします。 繰り返しステートメントの制御条件が false にならない場合、または制御変数が終端値に到達しない場合、無限ループが発生します。無限ループでは、CPU サイクルが何度も使用されます。
public class Test {
    // ----- 递归 -----
    // 求给定数的阶乘的方法
    static int factorialUsingRecursion(int n)
    {
        if (n == 0)
            return 1;

        // 递归呼叫
        return n * factorialUsingRecursion(n - 1);
    }

    // -----迭代 -----
    //求给定数的阶乘的方法
    static int factorialUsingIteration(int n)
    {
        int res = 1, i;

        // 迭代
        for (i = 2; i <= n; i++)
            res *= i;

        return res;
    }

    public static void main(String[] args)
    {
        int num = 5;
        System.out.println("Factorial of " + num
                + " using Recursion is: "
                + factorialUsingRecursion(5));

        System.out.println("Factorial of " + num
                + " using Iteration is: "
                + factorialUsingIteration(5));
    }
}
ログイン後にコピー
Factorial of 5 using Recursion is: 120
Factorial of 5 using Iteration is: 120
ログイン後にコピー

#関数に を適用します。 For ループ。
終了 基本的なケースでは、ここでは関数呼び出しは行われません。 反復子の終了条件が満たされなくなったとき。
使用法 コード サイズを小さくする必要があり、時間の複雑さが問題にならない場合に使用します。 時間の複雑さと拡張されたコード サイズのバランスをとる必要がある場合に使用します
コード サイズ コードの削減 コードの増加
時間計算量 非常に高い (通常は指数関数的な) 時間計算量。 時間計算量は比較的低いです (通常は多項式対数)。
空間の複雑さ 空間の複雑さは反復よりも高くなります。 空間の複雑さは低いです。
ヒープ ここでのスタックは、関数が呼び出されたときにローカル変数を格納するために使用されます。 スタックは使用しないでください。
速度 スタックの維持と更新のオーバーヘッドがあるため、実行は遅くなります。 一般に、スタックを使用しないため、再帰よりも高速です。
ストレージ 再帰では、反復と比較してより多くのメモリが使用されます。 反復中に関数呼び出しがないため、オーバーヘッドはありません。
2.コード

以上がJava における再帰と反復の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Javaの完全数 Javaの完全数 Aug 30, 2024 pm 04:28 PM

Java における完全数のガイド。ここでは、定義、Java で完全数を確認する方法、コード実装の例について説明します。

Java の乱数ジェネレーター Java の乱数ジェネレーター Aug 30, 2024 pm 04:27 PM

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

ジャワのウェカ ジャワのウェカ Aug 30, 2024 pm 04:28 PM

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

Javaのスミス番号 Javaのスミス番号 Aug 30, 2024 pm 04:28 PM

Java のスミス番号のガイド。ここでは定義、Java でスミス番号を確認する方法について説明します。コード実装の例。

Java Springのインタビューの質問 Java Springのインタビューの質問 Aug 30, 2024 pm 04:29 PM

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

Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

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

Java での日付までのタイムスタンプ Java での日付までのタイムスタンプ Aug 30, 2024 pm 04:28 PM

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

未来を創る: まったくの初心者のための Java プログラミング 未来を創る: まったくの初心者のための Java プログラミング Oct 13, 2024 pm 01:32 PM

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

See all articles