재귀함수
함수 내에서 자기의 함수를 다시 호출하는 함수
스택 내에서 차곡차곡 쌓아두었다가 일괄로 처리를 한다
#include <stdio.h>
int func(int num) {
if (num == 1)
return 1;
else
return num * func(num-1);
}
void main() {
int i;
for (i = 5; i >= 0; i--)
{
if (i%2 == 1)
printf("func(%d): %d\n", i, func(i)); // 5 120, 3 6, 1 1
}
}
#include <stdio.h>
int f(int n) {
if(n>0)
return n%10 + f(n/10); // 3 + f(12) // 3 + 2 + f(1) // 3 + 2 + 1
else
return 0;
}
void main() {
int result;
result = f(123);
printf("%d\n", result) // 6
}
#include <stdio.h>
int func(int n) {
if (n%2 == 1)
n = n-1;
if (n==0)
return 0;
return (func(n-2)+n); // func(16) + 18 // func(14) + 16 + 18 // func(12) + 14 + 16 + 18 //
// func(10) + 12 + 14 + 16 + 18 // ... // 2부터 18까지의 짝수의 합 = 90
}
void main() {
int result;
result = func(19);
printf("result=%d\n", result); // 90
}
#include <stdio.h>
int my(int i, int j) {
if (i<3) i=j=1;
else {
i = i-1; // 4, 3, 2
j = j-i; // 10, 7, 5
printf("%d, %d,", i, j); // 4, 10, 3, 7, 2, 5
return my(i, j);
}
}
void main() {
my(5, 14);
return 0;
}
#include <stdio.h>
int recurstion (int n) {
if (n < 5) return 1;
else if (n % 5 == 1)
return n + recursion(n-1); // 16 + recursion(15) // 16 + 11 + recursion(10)
// 16 + 11 + 6 + recursion(5) // 16 + 11 + 6 + 1 = 34
else recursion(n-1);
}
void main(){
int n = recursion(16);
printf("%d", n); // 34
}
'정보처리기사' 카테고리의 다른 글
[정보처리기사] C언어 특강 60강 이후 정리(printf 출력순서, ++ -- 연속, fork) (0) | 2024.10.10 |
---|---|
[정보처리기사] C언어 특강 58~60강 정리(중복 재귀함수) (0) | 2024.10.10 |
[정보처리기사] C언어 특강 49~52강 정리(static 변수) (0) | 2024.10.09 |
[정보처리기사] C언어 특강 37~48강 정리(함수에 주소전달) (0) | 2024.10.06 |
[정보처리기사] C언어 특강 35~36강 정리(구조체, 배열포인터) (0) | 2024.10.06 |