티스토리 뷰
- 문자열을 프린트
public class Recursion {
public static void main(String[] args) {
printChars("abcdefg");
}
public static void printChars(String str) {
if(str.length() == 0)
return;
else {
System.out.println(str.charAt(0));
printChars(str.substring(1));
}
}
}
- 문자열을 뒤집어 프린트
public class Recursion {
public static void main(String[] args) {
printCharsReverse("abcdefg");
}
public static void printCharsReverse(String str) {
if(str.length() == 0)
return;
else {
printCharsReverse(str.substring(1));
System.out.println(str.charAt(0));
}
}
}
- 2진수로 변환하여 출력
public class Recursion {
public static void main(String[] args) {
printInBinary(16);
}
public static void printInBinary(int n) {
if(n < 2)
System.out.println(n);
else {
printInBinary(n/2);
System.out.println(n%2);
}
}
}
- 배열의 합 구하기
public class Recursion {
public static void main(String[] args) {
int []data = {1, 3, 2};
int n = data.length;
System.out.println(sum(n, data));
}
public static int sum(int n, int []data) {
if(n <= 0)
return 0;
else
return sum(n-1, data) + data[n-1];
}
}
- Recursion vs Iteration
- 모든 순환함수는 반복문(iteration)으로 변경 가능
- 그 역도 성립함. 즉 모든 반복문은 recursion으로 표현 가능함
- 순환함수는 복잡한 알고리즘을 단순하고 알기쉽게 표현하는 것을 가능하게 함
- 하지만 함수 호출에 따른 오버해드가 있음(매개변수 전달, 액티베이션 프레임 생성 등)
- 순환 알고리즘 설계
- 적어도 하나의 base case, 즉 순환되지 않고 종료되는 case가 있어야 함
- 모든 case는 결국 base case로 수렴해야 함
- if(){return base case;} else {return recursion};
- 암시적(implicit) 매개변수를 사용하지 말고 명시적(explicit) 매개변수로 바꾸어라
- 순차 탐색
'algorithm' 카테고리의 다른 글
나이차이, 나이계산, 숫자만추출 (0) | 2020.11.26 |
---|---|
자연수의 합, 진약수의 합 (0) | 2020.11.25 |
[Algorithm] 순환(recursion) 알고리즘 (0) | 2020.05.30 |
[Algorithm] LeetCode 20. Valid Parentheses using Stack (0) | 2020.05.30 |
[Algorithm] LeetCode 448. Find All Numbers Disappeared in an Array using ArrayList (0) | 2020.05.24 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 재귀함수
- 구조체
- 동적프로그래밍
- 인접행렬
- Stack
- 인접리스트
- 세마포어
- 병행프로세스
- 자료구조
- react
- C
- 교착상태
- 입출력장치
- 클래스
- 최단경로
- 운영체제
- server side rendering
- Java
- 스텍
- client side rendering
- 배열
- BFS
- 소프트웨어
- C++
- javascript
- stackframe
- 퀵정렬
- dfs
- 알고리즘
- 이진탐색
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함