[Baekjoon] - 10단계 : 재귀함수

1. 팩토리얼

#include <stdio.h>

int rec(int n);

int main(){
    int n;
    scanf("%d",&n);
    
    printf("%d",rec(n));
}

int rec(int n){
    if(n < 1) return 1;
    
    return n * rec(n-1);
}

2. 피보나치 수 5

#include <stdio.h>

int rec(int n);

int main(){
    int n;
    scanf("%d",&n);
    
    printf("%d",rec(n));
}

int rec(int n){
    if(n <= 0) return 0;
    else if(n == 1 || n == 2) return 1;
    return rec(n-1) + rec(n-2);
}

3. 별 찍기 - 10

#include <stdio.h>

void rec(int i, int j, int num){
    if((i/num)%3 == 1 && (j/num)%3 == 1){
        printf(" ");
    }
    else{
        if(num/3 == 0) printf("*");
        else rec(i,j,num/3);
    }
}

int main(){
    int n;
    scanf("%d",&n);
    
    int num = n;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            rec(i,j,num);
        }
        printf("\n");
    }
}

4. 하노이 탑 이동 순서

#include <stdio.h>
#include <math.h>

void rec(int n, int a, int b, int c){
    if(n == 1) {
        printf("%d %d\n",a,c);
        return ;
    }
    
    rec(n-1,a,c,b);
    rec(1,a,b,c);
    rec(n-1,b,a,c);
}

int main(){
    int n;
    scanf("%d",&n);
    
    int min = pow(2,n)-1;
    printf("%d\n",min);
    
    rec(n,1,2,3);
    return 0;
}

요약

  • 없다.
  • 3번 별찍기는 조건을 알아내면 된다. 3으로 나눠가면서..
  • 하노이탑 간단해보여도 이해할 수 없다.