반응형
재귀 함수가 어려운 이유?
호출 관계는 파악하기 쉬우나, 호출 순서를 파악 하기가 힘들어진다.
하지만 호출 순서는 재귀가 복잡해 질수록 파악 하기가 힘들어지고,
호출 순서를 파악해야 될 상황이 오기전에 호출 관계를 파악하여 해결하여야한다.
그리고 재귀 함수는 자칫 잘못 이용하면 시간이 오래 걸리게 되고 프로그램에 부담이 되기에 조심하여야 한다.
재귀 함수의 진행 및 탈출 예
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | void Recursive(int num) { if(num <= 0) { return; } printf("Recursive call : %d\n",num); Recursive(num-1); } int main() { Recursive(3); return 0; } | Crocus |
재귀함수를 이용한 팩토리얼 예
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include <stdio.h> int total; int factorial(int n) { if(n == 0) return 1; else return n*factorial(n-1); } int main() { int n; scanf("%d",&n); total = factorial(n); printf("%d",total); return 0; } | Crocus |
이진 탐색 알고리즘을 재귀적으로 표현한 예
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 | int BSearchRecur(int ar[], int first, int last, int target) { if(first > last) { return -1; // -1 반환은 탐색의 실패를 의미(탈출 조건) } mid = (first+last) / 2; if(ar[mid] == target) { return mid; } else if(target < ar[mid]) { return BSearchRecur(ar, first, mid-1, target); // 앞부분을 대상으로 재 탐색 } else { return BSearchRecur(ar, mid+1, last, target); // 뒷부분을 대상으로 재 탐색 } } | Crocus |
반응형
'Applied > 알고리즘' 카테고리의 다른 글
선택 정렬(Selection Sort) (0) | 2016.04.12 |
---|---|
최댓값 최솟값 구하기 (0) | 2016.03.25 |
빅-오 표기법(Big-Oh Notation) (0) | 2015.11.23 |
이진 탐색 알고리즘(Binary Search) - 소스코드 (0) | 2015.11.23 |
이진 탐색 알고리즘(Binary Search) - 개념 (0) | 2015.11.20 |