재귀와 루프

JavaBeginner
지금 연습하기

소개

컴퓨터는 반복적인 작업을 자동화하는 데 자주 사용됩니다. 오류 없이 작업을 반복하는 것은 컴퓨터가 잘하고 사람이 잘 못하는 일입니다. 조건식과 마찬가지로, 루프도 서로 중첩될 수 있지만, 이렇게 하면 프로그램의 가독성이 떨어지고 성능도 좋지 않습니다. 중첩 루프는 피하도록 노력하십시오. Java 에는 세 가지 유형의 루프가 있습니다. 이 랩에서 하나씩 배우겠습니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 84%입니다.학습자들로부터 99%의 긍정적인 리뷰율을 받았습니다.

내용

컴퓨터 과학에서 **재귀 (Recursion)**는 문제 해결이 동일한 문제의 더 작은 인스턴스에 대한 해결책에 의존하는 기술입니다 ( 반복 (iteration) 과 반대). 이 접근 방식은 재귀라고 불리며 다양한 유형의 문제에 적용될 수 있습니다. 재귀는 컴퓨터 과학의 핵심 아이디어 중 하나입니다. 재귀의 힘은 유한한 수의 문장으로 무한한 집합의 객체를 정의할 수 있다는 가능성에 분명히 있습니다. 마찬가지로, 이 프로그램에 명시적인 반복이 없더라도 유한한 재귀 프로그램으로 무한한 수의 계산을 설명할 수 있습니다.

예시:

다음 코드를 /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
}

for 루프의 시작을 나타내는 **init condition (초기화 표현식)**은 한 번만 실행됩니다. **Conditional 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

continue 또는 break와 같은 코드를 문장의 if 블록에서 사용하여 루프 본문에서 언제든지 루프를 종료할 수 있습니다. 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 루프는 논리적으로 완벽하지 않습니다. 매우 신중하게 선택해야 합니다.