>  기사  >  Java  >  Java 재귀: 개념 및 사용법

Java 재귀: 개념 및 사용법

WBOY
WBOY앞으로
2023-04-23 22:58:161575검색

    1. 재귀의 개념

    1. 재귀란?

    재귀는 메소드 자체를 호출하는 프로세스입니다.

    재귀를 사용하려면 두 가지 전제 조건이 있습니다.

    1. 접근 조건과 종료 조건이 있습니다.

    2. 직접 전화해 보세요.

    재귀를 어떻게 구현하나요?

    가장 중요한 방법은 재귀를 구현하려면 재귀 공식을 도출해야 한다는 것입니다.

    재귀에 대해 생각하는 방법: 측면적으로 생각하고 재귀 공식에 따라 생각하세요.

    코드 실행: 수직 실행.

    2. 재귀 설명

    먼저 다음 코드를 살펴보세요.

    public class TestDemo {
        public static void func(){
            
            func();   //自己调用自己本身
        }
     
     
        public static void main(String[] args) {
            func();
     
        }
    }

    위 코드는 간단한 재귀입니다.

    이 코드의 실행 결과를 다시 살펴보겠습니다.

    그림 설명:

    Java 재귀: 개념 및 사용법

    위 그림의 재귀의 경우 종료되는 조건이 없으므로 이 함수는 끝없이 반복됩니다. 반복할 때마다 스택에 메모리를 할당해야 합니다. 스택에 계속 메모리를 할당하면 결국 스택이 오버플로됩니다.

    재향군인 여러분, 작성하는 재귀에 문제가 있을 때 경계를 올바르게 찾지 못하면 반드시 오류가 보고됩니다.

    Java 재귀: 개념 및 사용법

    이 오류가 보고되면 해고가 됩니다. 조건이 잘못되었거나 종료 조건을 작성하지 못하면 재귀 프로세스가 너무 깊어지고 결국 스택이 오버플로됩니다.

    위 코드가 정확해지려면 종료 조건을 추가해야 합니다.

    올바른 코드는 다음과 같습니다.

    public class TestDemo {
        public static void func(int n){
            if(n == 1) return;
            func(n -1);
        }
     
     
        public static void main(String[] args) {
            func(3);
     
        }
    }

    다음은 간단한 예제를 통해 재귀에 대한 더 깊은 이해를 제공합니다

    2. 재귀의 활용

    예: 재귀적으로 n의 팩토리얼 찾기 그리기 분석:

    Java 재귀: 개념 및 사용법

    구현 코드:

    public class TestDemo {
        public static int fac(int n){
            if(n == 1) {
                return 1;
            }
            int tmp = n * fac(n - 1);
            return tmp;
        }
        public static void main(String[] args) {
            System.out.println(fac(5));
     
        }
    }

    코드 그림 설명:

    Java 재귀: 개념 및 사용법

    예: n

    의 합 찾기 그림 분석:

    Java 재귀: 개념 및 사용법

    구현 코드:

    第一种写法:
    public class TestDemo {
        public static int sumAdd(int n){
            if(n == 1) {
                return 1;
            }
            int tmp = n + sumAdd(n - 1);
            return tmp;
        }
        public static void main(String[] args) {
            System.out.println(sumAdd(3));
     
        }
    }
     
    第二种写法:
    public class TestDemo {
        public static int sumAdd(int n){
            if(n == 1) {
                return 1;
            }
           
            return n + sumAdd(n -1);
        }
        public static void main(String[] args) {
            System.out.println(sumAdd(3));
     
        }
    }

    예: 재귀 구현은 각 숫자를 순서대로 인쇄합니다.

    그림 분석 :

    Java 재귀: 개념 및 사용법

    구현 코드:

    public class TestDemo {
     
        public static void print(int n){
            if(n < 10){
                System.out.print(n+" ");
            }else{
                print(n/10);
                System.out.print(n%10+" ");
            }
        }
        public static void main(String[] args) {
            print(1234);
     
     
        }
    }

    예: 재귀 메서드를 작성하고, 음이 아닌 정수를 입력하고, 이를 구성하는 숫자의 합을 반환합니다. 예: 1729를 입력하면 1+7+2+9

    가 반환되어야 합니다. 구현 코드:

    public class TestDemo {
     
     
        public static int sumEveryone(int n){
            if(n < 10){
               return n;
            }else{
                return n%10 + sumEveryone(n/10);
            }
        }
     
        public static void main(String[] args) {
            System.out.println(sumEveryone(7910));
     
        }
     
    }

    질문 예: n번째 피보나치 수를 찾으세요

    도면 분석:

    Java 재귀: 개념 및 사용법

    구현 코드:

    第一种方法:递归
    public class TestDemo {
        public static int fib(int n){
            if(n == 1 || n == 2){
                return 1;
            }else{
                return fib(n-2)+fib(n-1);
            }
        }
        public static void main(String[] args) {
            System.out.println(fib(5));
     
        }
     
     
     
    第二种方法:叫做循环(迭代)实现
        public static int fib2(int n){
            if(n == 1 || n==2){
                return 1;
            }
                int f1 = 1;
                int f2 = 1;
                int f3 = 0;
                for (int i = 3; i < n; i++) {
                    f3 = f1+f2;
                    f1 = f2;
                    f2 = f3;
                }
                return f3;
     
        }
        public static void main(String[] args) {
            System.out.println(fib2(45));
     
        }

    위 내용은 Java 재귀: 개념 및 사용법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제