This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| algorithm:recursion [2016/06/07 13:03] – text 편집 ledyx | algorithm:recursion [2022/06/14 19:05] (current) – [해설] 그림 크기 수정 ledyx | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | = Recursion | + | = Recursion = |
| - | http:// | + | |
| - | {{tag> | + | |
| - | = 합 = | + | {{tag> |
| + | |||
| + | = 기초 = | ||
| + | |||
| + | * 이해의 관점 | ||
| + | * Heap 영역의 새로운 주소값을 갖는 **복사본** 함수를 생성한다! | ||
| + | * 가장 마지막에 호출된 함수가 | ||
| + | * 주의점! | ||
| + | * 반드시 __**탈출 조건**__이 있어야 한다.(= 탈출조건이 없으면 계속 복사본 함수를 만들어내어 값을 반환(Return)하지 못한다.) | ||
| + | |||
| + | |||
| + | == 예시 == | ||
| + | |||
| + | <sxh c> | ||
| + | #include < | ||
| + | |||
| + | void Recursion(int num) { | ||
| + | |||
| + | //탈출 조건 | ||
| + | if(num <= 0) | ||
| + | return; | ||
| + | |||
| + | //탈출 조건을 만들기 위한 인자(Argument)와 재귀 호출 | ||
| + | Recursion(num-1); | ||
| + | |||
| + | printf(" | ||
| + | } | ||
| + | |||
| + | void main() { | ||
| + | Recursion(3); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | {{: | ||
| + | |||
| + | |||
| + | === 해설 === | ||
| + | |||
| + | * <fc red>→ 연쇄적 호출</ | ||
| + | * <fc blue>→ 연쇄적 반환</ | ||
| + | |||
| + | {{ : | ||
| + | === 결론 === | ||
| + | |||
| + | * "< | ||
| + | * 재귀함수 호출이 있으면 그 다음 코드는 그 시점에서 무시된다. (☞ printf()가 무시된 것에 주목!) | ||
| + | * " | ||
| + | * 반환시 복사본 함수를 호출하여 값을 읽어오기 때문 | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | = 예제 = | ||
| + | |||
| + | == 합 == | ||
| <sxh java> | <sxh java> | ||
| public static int sum(int n) { | public static int sum(int n) { | ||
| Line 13: | Line 66: | ||
| </ | </ | ||
| - | = Factorial = | + | == Factorial |
| <sxh java> | <sxh java> | ||
| private static int factorial(int n) { | private static int factorial(int n) { | ||
| Line 23: | Line 76: | ||
| </ | </ | ||
| - | = Fibonacci Array = | + | == Fibonacci Array == |
| <sxh java> | <sxh java> | ||
| public static int fibonacci(int n) { | public static int fibonacci(int n) { | ||
| Line 41: | Line 94: | ||
| </ | </ | ||
| - | = Hanoi Tower = | + | == Hanoi Tower == |
| <sxh java> | <sxh java> | ||
| public static void hanoiTower(int n, String from, String to, String temp) { | public static void hanoiTower(int n, String from, String to, String temp) { | ||