再帰とループ

JavaJavaBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

コンピュータはしばしば繰り返し作業を自動化するために使用されます。エラーなくタスクを繰り返すことは、コンピュータが得意で、人間が下手なことです。条件式と同様に、ループも互いにネストすることができますが、これはプログラムの読みやすさを低下させ、性能も良くなりません。ネストされたループを避けるようにしましょう。Java には 3 種類のループがあります。この実験では、それぞれを学んでいきましょう。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/ProgrammingTechniquesGroup(["Programming Techniques"]) java/BasicSyntaxGroup -.-> java/variables("Variables") java/BasicSyntaxGroup -.-> java/if_else("If...Else") java/BasicSyntaxGroup -.-> java/for_loop("For Loop") java/BasicSyntaxGroup -.-> java/while_loop("While Loop") java/BasicSyntaxGroup -.-> java/break_continue("Break/Continue") java/BasicSyntaxGroup -.-> java/output("Output") java/ProgrammingTechniquesGroup -.-> java/recursion("Recursion") subgraph Lab Skills java/variables -.-> lab-178552{{"再帰とループ"}} java/if_else -.-> lab-178552{{"再帰とループ"}} java/for_loop -.-> lab-178552{{"再帰とループ"}} java/while_loop -.-> lab-178552{{"再帰とループ"}} java/break_continue -.-> lab-178552{{"再帰とループ"}} java/output -.-> lab-178552{{"再帰とループ"}} java/recursion -.-> lab-178552{{"再帰とループ"}} end

コンテンツ

コンピュータサイエンスにおける「再帰」は、問題の解が同じ問題のより小さなインスタンスの解に依存する手法です(反復とは対照的)。このアプローチは「再帰」と呼ばれ、多くの種類の問題に適用できます。再帰はコンピュータサイエンスの中心的な考え方の一つです。再帰の力は、有限の数の文で無限のオブジェクトを定義できる可能性に明らかにあります。同じように、無限の計算を、有限の再帰プログラムで記述できます。たとえこのプログラムに明示的な反復が含まれていなくてもです。

/home/labex/project/recursionTest.java ファイルに次のコードを記述します。

public class recursionTest{
    public static int fibonacci(int n){
        if(n<=2){
            return 1;
        }else{
            return fibonacci(n-1)+fibonacci(n-2);
        }
    }
    public static void main(String[] args){
        int res = recursionTest.fibonacci(10);
        System.out.println(res);
    }
}

出力

次のコマンドを使用して recursionTest.java ファイルを実行します。

javac /home/labex/project/recursionTest.java
java recursionTest

出力を見てください。

55

whileループ

whileループに入るときは、まず条件がチェックされます。whileループは、条件が偽になるまで常に実行されます。構文は次のようになります。

/home/labex/project/whileTest.java ファイルに次のコードを記述します。

public class whileTest
{
    public static void main(String[] args)
    {
        int x = 1;
        // xが3より大きくなったときに終了し、内側のコードは合計3回実行されます。
        while (x <= 3)
        {
            System.out.println("x = " + x);
            // 次の反復のためにxの値を1つずつ増やします
            x++;
        }
    }
}

出力

次のコマンドを使用して whileTest.java ファイルを実行します。

javac /home/labex/project/whileTest.java
java whileTest

出力を見てください。

x = 1
x = 2
x = 3

do-whileループ

このループはwhileループと非常に似ていますが、1点違いがあります。条件の値がどんなになろうとも、ループは必ず少なくとも1回は実行されます。その後、条件がチェックされます。ですから、場合によってはいくつかの状況に適さないかもしれません。構文は次の通りです。

/home/labex/project/doWhileTest.java ファイルに次のコードを記述します。

public class doWhileTest
{
    public static void main(String[] args)
    {
        int x = 1;
        do
        {
            // 以下のコードが最初に実行され、その後条件がチェックされます。
            System.out.println("x = " + x);
            x++;
        }
        while (x <= 3);
    }
}

出力

次のコマンドを使用して doWhileTest.java ファイルを実行します。

javac /home/labex/project/doWhileTest.java
java doWhileTest

出力を見てください。

x = 1
x = 2
x = 3

forループ

forループは次のようになります。

for (init expression; condition expression; increment expression)
{
    // statements here
}

forループの開始を示す初期化条件は1回だけ実行されます。条件式は、ループに入る前に毎回チェックされます。これはループの終了条件をテストするために使用され、ブール値を返す必要があります。条件が真になると、ループ内の文が実行されます。その後、インクリメント式が実行されて、次の反復のためにカウンターやその他の変数の値が変更されます。

/home/labex/project/forTest.java ファイルに次のコードを記述します。

public class forTest
{
    public static void main(String[] args)
    {
        // forループはx=1のときからx<=3のときまで実行されます
        for (int x = 1; x <= 3; x++) {
            System.out.println("x = " + x);
        }
    }
}

出力

次のコマンドを使用して forTest.java ファイルを実行します。

javac /home/labex/project/forTest.java
java forTest

出力を見てください。

x = 1
x = 2
x = 3

ループ本体の中でいつでも、ifブロックの文の中で continuebreak のようなコードを使ってループを抜けることができます。break は全体のループを抜けますが、continue は現在の反復を終了して、次の反復を実行します(条件が真の場合)。

/home/labex/project/loopTest.java ファイルに次のコードを記述します。

public class loopTest
{
    public static void main(String[] args)
    {
        // forループはx=1のときからx<=3のときまで実行されます
        for (int x = 1; x <= 3; x++) {
            if(x==2){
                // 全体のループを抜ける
                break;
                // continueは現在の反復のみを終了し、次の反復を行います
                // break式を削除してcontinueを使用することができます。出力を見てください。
                // continue;
            }
            System.out.println("x = " + x);
        }
    }
}

出力

次のコマンドを使用して loopTest.java ファイルを実行します。

javac /home/labex/project/loopTest.java
java loopTest

出力を見てください。

x = 1

まとめ

この実験では、3種類のループを学びました。forループとwhileループは学びやすいですが、do-whileループは論理的にはあまり完璧ではありません。非常に慎重に選択する必要があります。