정보처리기사

[정보처리기사] C언어 특강 58~60강 정리(중복 재귀함수)

jaeheon0520 2024. 10. 10. 00:58

재귀함수 2개 → 피라미드 그리기

 

#incldue <stdio.h>

int recur(int a, int b) {
    if (a <= 1)
    	return a * b;
    else
        return a * recur(a-1, b+1) + recur (a-1, b); // 3 * recur(2, 3) + recur(2, 2)
        // 3 * (2 * recur(1, 4) + recur(1, 3)) + 2 * recur(1, 3) + recur(1, 2)
        // 3 * 11 + 8
        // 41
}

void main() {
	int a = 3, b = 2;
    printf("%d\n", recur(a, b)); // 41
}

 

 

#include <stdio.h>

int sub(int n) {
    if(n==0) return 0;
    if(n==1) return 1;
    return (sub(n-1) + sub(n-2)); // sub(3) + sub(2) // sub(2) + sub(1) + sub(1) + sub(0)
    // sub(1) + sub(0) + sub(1) + sub(1) + sub(0) = 3
}

void main() {
    int a = 0;
    a = sub(4);
    printf("%d", a); // 3
}

 

#include <stdio.h>

int fib(int n) {
    if (n==0) return 0;
    if (n==1) return 1;
    return (fib(n-1) + fib(n-2)); // fib(4) + fib(3) // fib(3) + fib(2) + fib(2) + fib(1)
    // fib(2) + fib(1) + fib(1) + fib(0) + fib(1) + fib(0) + 1
    // fib(1) + fib(0) + 1 + 1 + 0 + 1 + 0 + 1
    // 5
}

void main() {
    fib(5); // 5
}

// fib() 함수의 호출 횟수: 15회