정보처리기사
[정보처리기사] C언어 특강 53~57강 정리(재귀함수)
jaeheon0520
2024. 10. 9. 22:03
재귀함수
함수 내에서 자기의 함수를 다시 호출하는 함수
스택 내에서 차곡차곡 쌓아두었다가 일괄로 처리를 한다
#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
}