재귀는 메소드 자체를 호출하는 프로세스입니다.
재귀를 사용하려면 두 가지 전제 조건이 있습니다.
1. 접근 조건과 종료 조건이 있습니다.
2. 직접 전화해 보세요.
재귀를 어떻게 구현하나요?
가장 중요한 방법은 재귀를 구현하려면 재귀 공식을 도출해야 한다는 것입니다.
재귀에 대해 생각하는 방법: 측면적으로 생각하고 재귀 공식에 따라 생각하세요.
코드 실행: 수직 실행.
먼저 다음 코드를 살펴보세요.
public class TestDemo { public static void func(){ func(); //自己调用自己本身 } public static void main(String[] args) { func(); } }
위 코드는 간단한 재귀입니다.
이 코드의 실행 결과를 다시 살펴보겠습니다.
그림 설명:
위 그림의 재귀의 경우 종료되는 조건이 없으므로 이 함수는 끝없이 반복됩니다. 반복할 때마다 스택에 메모리를 할당해야 합니다. 스택에 계속 메모리를 할당하면 결국 스택이 오버플로됩니다.
재향군인 여러분, 작성하는 재귀에 문제가 있을 때 경계를 올바르게 찾지 못하면 반드시 오류가 보고됩니다.
이 오류가 보고되면 해고가 됩니다. 조건이 잘못되었거나 종료 조건을 작성하지 못하면 재귀 프로세스가 너무 깊어지고 결국 스택이 오버플로됩니다.
위 코드가 정확해지려면 종료 조건을 추가해야 합니다.
올바른 코드는 다음과 같습니다.
public class TestDemo { public static void func(int n){ if(n == 1) return; func(n -1); } public static void main(String[] args) { func(3); } }
다음은 간단한 예제를 통해 재귀에 대한 더 깊은 이해를 제공합니다
예: 재귀적으로 n의 팩토리얼 찾기 그리기 분석:
구현 코드:
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)); } }
코드 그림 설명:
예: n
의 합 찾기 그림 분석:
구현 코드:
第一种写法: 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)); } }
예: 재귀 구현은 각 숫자를 순서대로 인쇄합니다.
그림 분석 :
구현 코드:
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번째 피보나치 수를 찾으세요
도면 분석:
구현 코드:
第一种方法:递归 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!