함수는 자기 자신을 호출하는 것도 가능합니다.
예를 먼저 보자면,
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 | #include <stdio.h> long factorial(int n); int main() { int n = 0; printf("정수를 입력하시오"); scanf("%d", &n); printf("%d!은 %d입니다. \n", n, factorial(n)); return 0; } long factorial(int n) { printf("factorial(%d)\n", n); if (n <= 1) { return 1; } else { return n * factorial(n - 1); } } | cs |
순환 함수의 예입니다.
factorial은 n*(n-1)! 의 식을 이용해서 구할수 있는데요. 자기 자신인 n을 이용하여 함수를 순환적으로 호출되어서 n이 1이하일때 중지되어서 값을 구할 수 있습니다.
순환 함수는 순환을 멈추기위한 식과, 순활 호출을 하는 부분으로 나눕니다. 순환을 멈추기위한 식이 존재하지않으면 호출시에 -까지 넘어가버리고 무한루푸또는 에러를 낼것입니다.
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 | #include <stdio.h> void hanoi_tower(int n, char from, char tmp, char to); int main() { hanot_tower(10, 'A', 'B', 'C'); } void hanoi_tower(int n, char from, char tmp, char to) { if (n==1) { printf("판 1을 %c에서 %c으로 옮긴다.\n", from, to); } else { hanoi_tower(n - 1, from, to, tmp); printf("원판 %d을 %c에서 %c으로 옮긴다..\n", n, from, to); hanoi_tower(n - 1, tmp, from, to); } } | cs |
순환의 파워를 가장 극명하게 보여주는 예제입니다. 순환 함수를 이용하여 10개의 원판을 옮기는 방법이 빠르게 나옵니다.
'C 프로그래밍 > 7. 함수와 변수' 카테고리의 다른 글
7.3 외부 연결(extern), 각종 저장 유형 (0) | 2019.06.18 |
---|---|
7.2 변수의 생존 시간(auto, static) (0) | 2019.06.18 |
7.1 변수의 속성, 지역변수, 전역변수 (0) | 2019.06.18 |