递归与循环

JavaJavaBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

计算机通常用于自动化重复性任务。重复执行任务而不出错是计算机擅长的,而人类则不太擅长。与条件表达式类似,循环也可以嵌套在另一个循环中,但这会使我们的程序难以阅读,并且性能也不会很好。尽量避免嵌套循环。在 Java 中有三种类型的循环。我们将在本实验中逐一学习它们。


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

内容

递归(Recursion)是计算机科学中的一种技术,其中问题的解决方案依赖于同一问题的较小实例的解决方案(与迭代相对)。这种方法被称为递归,可以应用于许多类型的问题。递归是计算机科学的核心思想之一。递归的强大之处显然在于能够通过有限的语句定义无限的对象集合。同样地,无限的运算可以通过有限的递归程序来描述,即使该程序不包含显式的重复。

示例:

/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 循环会一直运行,直到条件为 false。其语法如下:

示例:

/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 循环非常相似,但有一个区别。无论条件的值是什么,循环至少会运行一次;之后才会检查条件。因此,有时它可能不适合某些情况。其语法如下:

示例:

/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
}

初始化表达式(init expression)标志着 for 循环的开始,只会运行一次。条件表达式(condition expression)每次进入循环之前都会被检查,用于测试循环的退出条件,必须返回一个布尔值。一旦条件为 true,循环中的语句就会被执行;之后会执行增量表达式(increment expression),用于修改计数器或其他变量的值,以便进行下一次迭代。

示例:

/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

你可以在循环体中使用 continuebreak 等代码随时退出循环。break 会退出整个循环,而 continue 只会退出当前迭代并执行下一次迭代(如果条件为 true)。

示例:

/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

总结

在本实验中,我们学习了三种类型的循环。for 循环和 while 循环相对容易掌握,而 do-while 循环在逻辑上并不十分完美。你应该非常谨慎地选择使用它。