반복문 - 순환
•
반복문으로 표현할 수 있는 것은 순환으로 표현가능하다.
•
그 반대의 경우도 성립한다.
•
순환함수는 복잡한 알고리즘을 단순하고 알기 쉽게 표현할 수 있게 해준다.
•
하지만 순환함수 호출에 따른 오버헤드가 있다. - 매개변수 전달, 엑티베이션 프레임 생성 등
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)); }}
Java
복사
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
* */}
Java
복사
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
* */}
Java
복사
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 * */}
Java
복사
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 * */}
Java
복사