안녕하세요. 오늘은 C언어 재귀함수에 대해 알아보겠습니다
재귀함수란 자기자신을 다시 호출하는 함수를 의미합니다
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <stdio.h> #include <stdlib.h> void re(void) { printf("re함수 실행 \n"); re(); } int main(void) { re(); } |
re함수안에서 re함수 자기자신을 호출하고있습니다
"re함수 실행" 이라는 문장이 무한히 나오게 됩니다.. 그래서 함수가 끝나는 조건도 있어야 합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <stdio.h> #include <stdlib.h> int re(int i) { printf("re함수 실행 %d \n",i); i--; if(i == 0) return 0; re(i); } int main(void) { re(10); } |
이런식으로 코드를 작성하면
re(10) -> re(9)-> ....->re(1)
이런식으로 함수가 실행되게됩니다
re(1)일때 i가 0이되므로 re(1)함수가 끝나게 되고 나머지 함수들도 끝나게 됩니다
재귀함수를 이용하면 팩토리얼을 구하는 함수를 만들 수 있습니다
팩토리얼이란 n! = n*(n-1)*(n-2)*....2*1이 됩니다
그래서 위에서 한 예제를보면 10을 전달인자로 넘겼을때 10,9,...1 이 출력됬는데 이걸 다 곱하면 됩니다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <stdio.h> #include <stdlib.h> int re(int i) { int fac=1; printf("re함수 실행 %d \n",i); if(i == 0) return 1; fac = i * re(i-1); return fac; } int main(void) { printf("10!값 : %d \n",re(10)); } |
re(10) -> re(9)-> ....->re(1)->re(0) 이 순서로 호출되고
re(0)일때 리턴값으로 1을 넘겨줍니다
그럼 re(1)함수에서 fac = 1*re(1-1)이므로 fac는 1이되고 1을 리턴합니다
그럼 re(2)함수에서 fac = 2*re(2-1)이므로 fac는 2이되고 2를 리턴합니다
그럼 re(3)함수에서 fac = 3*re(3-1)이므로 fac는 6이되고 6을 리턴합니다
.
.
.
이런식으로 하면 10!가 나오게 됩니다
'프로그래밍 언어 > C언어' 카테고리의 다른 글
함수 선언할 때 매개변수에 *넣는거와 안넣는거 차이점. (0) | 2020.01.06 |
---|---|
#define와 #와 ##의 관계 (0) | 2019.07.06 |
C언어의 메모리 구조 (0) | 2019.06.02 |
C언어 함수란? (0) | 2019.05.29 |
C언어 역슬래시(\)란? (0) | 2019.05.20 |