정보처리기사

[정보처리기사] 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
}