순환적으로 사고하기
반복문 - 순환
반복문으로 표현할 수 있는 것은 순환으로 표현가능하다.
그 반대의 경우도 성립한다.
순환함수는 복잡한 알고리즘을 단순하고 알기 쉽게 표현할 수 있게 해준다.
하지만 순환함수 호출에 따른 오버헤드가 있다. - 매개변수 전달, 엑티베이션 프레임 생성 등
1. 문자열의 길이계산
package practice.algorithm.recursion;
public class StringLength {
public static void main(String[] args) {
String s = "elephant";
System.out.println("stringLengthCalculator(s) = " + stringLengthCalculator(s));
}
private static int stringLengthCalculator(String s) {
if (s.length() == 0) {
return 0;
}
return 1 + stringLengthCalculator(s.substring(1));
}
}
2. 문자열을 프린트
package practice.algorithm.recursion;
public class PrintString {
public static void main(String[] args) {
String s = "elephant";
printString(s);
}
private static void printString(String s) {
if (s.length() == 0) {
return;
}
System.out.println(s.charAt(0));
printString(s.substring(1));
}
/**
* e
* l
* e
* p
* h
* a
* n
* t
* */
}
3. 문자열을 뒤집어 프린트하기
package practice.algorithm.recursion;
public class PrintStringReverse {
public static void main(String[] args) {
String s = "elephant";
printReverseOrder(s);
}
private static void printReverseOrder(String s) {
if (s.length() == 0) {
return;
}
printReverseOrder(s.substring(1));
System.out.println(s.charAt(0));
}
/**
* t
* n
* a
* h
* p
* e
* l
* e
* */
}
4. 입력된 정수를 이진수로 변환하기
package practice.algorithm.recursion;
public class BinaryNumber {
public static void main(String[] args) {
int num = 10;
toBinaryNumber(num);
}
private static void toBinaryNumber(int num) {
if (num < 2) {
System.out.println(num);
return;
}
toBinaryNumber(num / 2) ;
System.out.println(num % 2);
}
/**
* 1
* 0
* 1
* 0
* */
}
5. 배열의 합 구하기
package practice.algorithm.recursion;
public class ArraySum {
public static void main(String[] args) {
int[] numArr = new int[]{1, 10, 100, 1000, 10000};
System.out.println("sumArray(numArr) = " + sumArray(numArr, 0));;
}
private static int sumArray(int[] numArr, int index) {
if (index == numArr.length-1) {
return numArr[index];
}
return numArr[index] + sumArray(numArr, index + 1);
}
/**
* sumArray(numArr) = 11111
* */
}
Last updated