예제1. 문자열의 길이 계산
코드
import java.util.Scanner;
public class example {
public static int length(String str) {
if(str.equals("")) return 0;
else return 1 + length(str.substring(1));
}
public static void main(String[] args) {
System.out.println(length("mouse"));
}
}
팩토리얼, 피보나치 수열, 최대공약수를 순환(재귀함수)으로 푼건 익숙해서 아무 생각 없었는데
문자열의 길이 계산을 순환으로 풀어내다니...! 정말 신세계였다. 사고의 확장!!! 너무 재밌어!!!
코딩할 때 문자열에서 앞에 몇 문자를 날리고 뒤의 문자열만 쓰고 싶을 때 substring(num) 형태를 많이 쓰는 것 같다. 메모메모!
예제 2. 문자열의 프린트
코드
import java.util.Scanner;
public class example {
public static void printChars(String str) {
if(str.length()==0) return ; // 또는 str.equals("")
else {
System.out.print(str.charAt(0));
printChars(str.substring(1));
}
}
public static void main(String[] args) {
printChars("mouse");
}
}
예제 3. 문자열을 뒤집어 프린트
코드
import java.util.Scanner;
public class example {
public static void printCharsReverse(String str) {
if(str.length()==0) return ; // 또는 str.equals("")
else {
printCharsReverse(str.substring(1));
System.out.print(str.charAt(0));
}
}
public static void main(String[] args) {
printCharsReverse("mouse");
}
}
문자열을 그냥 프린트 하는 것과, 뒤집어서 프린트 하는 로직을 이해해보자.
System.out.print(str.charAt(0)); printChars(str.substring(1));
else문의 코드를 맨 앞 문자를 먼저 출력하고, 재귀함수를 호출하면 정방향으로 문자열이 출력되고
printChars(str.substring(1)); System.out.print(str.charAt(0));
재귀함수를 호출 호출 호출하면서, 맨 앞 문자 출력이 스택 밑에 쌓이면서 하나씩 꺼냈을 때는 역방향으로 문자열이 출력된다.
예제 4. 2진수로 변환하여 출력
코드
import java.util.Scanner;
public class example {
public static void printInBinary(int n) {
if(n<2) System.out.print(1);
else {
printInBinary(n/2);
System.out.print(n%2);
}
}
public static void main(String[] args) {
printInBinary(15);
}
}
예제 5. 배열의 합 구하기
코드
import java.util.Scanner;
public class example {
public static int sum(int n, int[] arr) {
if(n<=0) return 0;
else {
return sum(n-1, arr) + arr[n-1];
}
}
public static void main(String[] args) {
int[] arr = new int[5];
for (int i = 0; i < 5; i++) { // arr = [5, 6, 7, 8, 9]
arr[i] = i+5;
}
System.out.println(sum(5, arr));
}
}
예제 6. 데이터 파일로부터 n개의 정수 읽어오기
Recursion vs Iteration
'Algorithm > Inflearn' 카테고리의 다른 글
[Inflearn] 자바 알고리즘 문제풀이 #02-06 6. 뒤집은 소수 (0) | 2022.11.15 |
---|---|
[Inflearn] 자바 알고리즘 문제풀이 #02-05 5. 소수(에라토스테네스 체) (0) | 2022.11.10 |
[Inflearn] 자바 알고리즘 문제풀이 #02-04 4. 피보나치 수열 (0) | 2022.11.09 |
[Inflearn] 영리한 프로그래밍을 위한 알고리즘 - 순환 (Recursion) 의 개념과 기본 예제 1 (0) | 2022.11.08 |
[Inflearn] 자바 알고리즘 문제풀이 #02-03 3. 가위 바위 보 (0) | 2022.11.08 |