[알고리즘 공부 6일차]

김주현·2021년 4월 20일
0

알고리즘

목록 보기
6/27
post-custom-banner

1.팩토리얼

for문이 아닌 재귀를 통해 팩토리얼을 구현한다

int factorial(int a)
{
	if (a == 0)
		return (1);
	return a * factorial(a-1);
}

재귀를 통해 간단하게 구현하였다.

2.피보나치수 5

int fibonacci(int a)
{
	if (a <= 0)
		return (0);
	if (a == 1)
		return (1);
	return fibonacci(a-1) + fibonacci(a-2);
}

재귀를 통해 피보나치를 구현한다 fibonacci(a) 는 fibonacci(a-1) + fibonacci(a-2) 이기 때문에 간단하게 재귀로 구현할수있다 탈출조건은 0보다 작을때 0 1일때는 1로 해주면된다

3.별찍기 10

분할 정복을 통해 해결한다

void star(int i, int j, int num)
{
    if ((i / num) % 3 == 1 && (j / num) % 3 == 1) {
        cout << ' ';
    }
    else
    {
        if (num / 3 == 0)
            cout << '*';
        else
            star(i, j, num / 3);
    }
}

빈칸의 규칙을 찾아 재귀를 통해 구성하면된다

4.하노이 탑 이동 순서

void print_hanoi(int a,int from,int to)
{
    int middle = 6 - from - to;
    if (a == 1)
    {
        printf("%d %d\n", from, to);
        return;
    }
    if (a >= 2)
    {
        print_hanoi(a - 1, from, middle);
        print_hanoi(1, from, to);
        print_hanoi(a - 1, middle, to);
        return;
    }
}
...

a는 원판의 크기이다 원판의 크기가 1일땐 바로 원하는곳으로 이동한다 아니라면 위에있는 작은판부터 가운데로 옮겨준 후에 첫번째칸에있는판을 원하는곳에 옮겨준다
post-custom-banner

0개의 댓글