프로그래밍에서 재귀는 함수가 직접 또는 간접적으로 자신을 호출하는 프로세스를 나타냅니다. 재귀는 컴퓨터 과학의 여러 문제를 해결하는 데 사용됩니다.
Java 프로그래밍 언어는 자신을 호출하는 메서드인 재귀 메서드 생성을 지원합니다.
이 자습서에서는 예제를 참조하여 재귀가 작동하는 방식 및 Java에서 재귀 함수를 만드는 방법에 대해 논의할 것입니다. 이 가이드를 읽고 나면 Java로 재귀 메서드를 작성하는 데 전문가가 될 것입니다.
자바 메소드
함수라고도 하는 메서드는 특정 작업을 수행하는 코드 블록입니다. 예를 들어, 값 배열의 합을 계산하거나 배열의 내용을 콘솔에 출력하는 데 메서드를 사용할 수 있습니다.
다음은 Java의 메소드 구문입니다.
modifier static returnType methodName (Parameters) { // Method body }
예를 들어, “It's Monday! 일주일의 절반이 지났습니다!” 콘솔에. 다음 코드를 사용하여 그렇게 할 수 있습니다.
class Main { public static void printItsWednesday() { System.out.println("It's Wednesday! We're half-way through the week!"); } public static void main(String[] args) { printItsWednesday(); } }
printItsWednesday()
를 사용하여 이 메서드를 호출할 때 , 다음이 반환됩니다.
수요일이다! 우리는 일주일의 절반입니다!
참가자의 81%는 부트캠프에 참석한 후 기술 직업 전망에 대해 더 자신감을 느꼈다고 말했습니다. 지금 부트캠프에 참여하십시오.
부트캠프 졸업생은 부트캠프 시작부터 첫 직장을 찾는 데까지 6개월도 채 걸리지 않았습니다.
Java 메소드에 대해 더 알고 싶다면 여기에서 Java의 메소드에 대한 전체 가이드를 읽을 수 있습니다.
위의 예에서 우리는 prinItsWednesday()
메인 프로그램의 메소드. 그러나 메서드 자체에서 메서드를 호출했다면 재귀 메서드를 생성했을 것입니다.
자바 재귀
재귀 메서드는 처음에는 기본 메서드 내에서 호출된 다음 메서드 자체 내에서 호출되는 메서드입니다. 다음은 재귀 메서드의 구문입니다.
static void executeMethod() { // Code here executeMethod(); // This is our recursive call // Code here } public static void main(String[] args) { executeMethod(); // This is the normal method call }
프로그램을 실행할 때 executeMethod()
메소드는 메인 프로그램에서 호출됩니다. 이로 인해 executeMethod()
실행할 메소드(이 경우 executeMethod()
포함) 방법. 따라서 프로그램이 실행될 때 루프에 들어갑니다.
프로그램은 executeMethod()
를 계속 실행합니다. 계속할 수 없도록 하는 조건이 충족될 때까지 메서드를 사용합니다. 재귀를 중지할 수 있는 조건을 지정하지 않으면 프로그램이 영원히 실행됩니다. 이것을 무한 재귀라고 합니다.
재귀를 사용해야 하는 이유는 무엇입니까? 첫째, 재귀는 특정 경우에 프로그램의 시간 복잡성을 줄일 수 있습니다. 둘째, 재귀를 사용하면 일부 알고리즘을 더 읽기 쉽고 유지 관리 가능한 방식으로 구현하는 것이 더 쉬워질 수 있습니다.
다음은 재귀를 사용하여 자주 작성되는 프로그램의 몇 가지 예입니다.
- 피보나치 수열 계산
- 문자열 반전
- 숫자의 계승 계산
- 이진 트리의 높이 계산
즉, 재귀는 작업을 수행하는 표준 메서드를 작성하는 것보다 느릴 수 있습니다. 이는 재귀 메서드가 실행될 때마다 재귀가 변수에 대한 새 저장 위치를 생성하기 때문입니다.
자바 재귀 예제
Java에서 재귀가 작동하는 방식을 보여주기 위해 두 가지 예를 살펴보겠습니다.
재귀를 사용하여 문자열 반전
1년 내내 각 학생의 성적을 문자열로 바꾸는 중학교 교사를 위한 프로그램을 구축한다고 가정합니다. 문자열은 학생이 받은 첫 번째 등급으로 시작하여 학생이 받은 가장 최근 등급으로 끝납니다. 문자열을 반대로 하여 학생이 얻은 마지막 또는 가장 최근의 성적이 문자열에서 첫 번째가 되도록 합니다.
다음 코드를 사용하여 문자열을 뒤집을 수 있습니다.
public class ReverseGrades { public static String reverse(String grades) { if (grades.isEmpty()) return grades; return reverse(grades.substring(1)) + grades.charAt(0); } public static void main(String[] args) { String grades = "CBCBAABACAABA"; String reverse_grades = reverse(grades); System.out.println("This student's grades for the year are: " + reverse_grades); } }
코드는 다음을 반환합니다.
이 학생의 올해 성적은 다음과 같습니다. ABAACABAABCBC
보시다시피, 우리 프로그램은 문자열의 내용을 뒤집었습니다. 우리 프로그램에서 reverse()
라는 재귀 함수를 만들었습니다. .
reverse()
함수가 실행되면 먼저 등급 문자열이 비어 있는지 확인합니다. 그렇다면 성적 목록을 주 프로그램으로 반환합니다. reverse()
때문에 재귀가 중지됩니다. 함수의 끝에서 호출은 실행할 기회가 주어지지 않습니다.
등급 문자열이 비어 있지 않으면 프로그램은 reverse()
를 실행합니다. 메서드를 다시 실행하고 함수의 결과를 문장의 첫 번째 문자에 연결합니다. charAt()
를 사용합니다. 이 예제에서 메서드를 사용하여 문장의 첫 번째 문자를 검색하고 이를 reverse()
의 왼쪽에 추가합니다. 방법.
문자열이 반전된 후 This student’s grades for the year are:
" 뒤에 학생 성적의 역 문자열이 프로그램에 반환됩니다.
재귀를 사용하여 계승 계산
재귀가 유용할 수 있는 또 다른 예는 숫자의 계승을 계산할 때입니다.
수학에서 계승은 함께 곱한 숫자보다 작거나 같은 모든 양의 정수의 곱입니다. 예를 들어, 5의 계승은 5*4*3*2*1, 즉 120과 같습니다. 계승 방법은 반복적인 계산을 포함하기 때문에 재귀가 문제를 해결하는 데 유용할 수 있는 좋은 실제 사례입니다. .
다음 Java 프로그램을 사용하면 Java에서 숫자 7의 계승을 계산할 수 있습니다.
class Main { static int calculateFactorial(int number) { if (number != 0) return number * calculateFactorial(number-1); else return 1; } public static void main(String[] args) { int num = 7; int answer = calculateFactorial(num); System.out.println("The factorial of 7 is: " + answer); } }
코드는 다음을 반환합니다.
The factorial of 7 is: 5040
이 예에서는 calculateFactorial()
이라는 메서드를 만듭니다. number 매개변수에 저장된 숫자를 다음 calculateFactorial()
의 결과로 곱합니다. 방법. 이 프로세스는 number 매개변수가 0이 될 때까지 실행됩니다.
숫자 매개변수가 0일 때 코드의 if 문은 1을 반환하고 calculateFactorial()
의 결과를 반환합니다. 메소드는 메인 프로그램으로 다시 전달됩니다.
따라서 calculateFactorial()
메소드는 7*6*5*4*3*2*1을 수행한 다음 메인 프로그램에 답을 반환합니다. 답이 계산되면 The factorial of 7 is:
, 우리 프로그램에서 계산한 답이 콘솔에 인쇄됩니다.
결론
재귀는 자신을 호출하는 메서드를 설명하는 데 사용되는 프로그래밍 개념입니다. 재귀 메서드는 작업을 여러 번 반복해야 하고 현재 반복에서 해당 작업의 이전 반복 결과를 사용해야 하는 경우에 유용할 수 있습니다.
이 튜토리얼은 자바 재귀의 기초와 재귀 메서드를 만드는 방법을 살펴보았습니다. 또한 이 자습서에서는 문자열을 반전하고 계승을 계산하는 것과 관련하여 실제 재귀의 두 가지 예를 살펴보았습니다.
이제 전문가처럼 Java에서 재귀 메서드 작업을 시작할 준비가 되었습니다!