Q1. 하노이의 탑 각 단계
하노이의 탑 목표
A에 있는 원판을 모두 C로 옮기기
하노이의 탑 규칙
1. 한 번에 한 원판만 옮길 수 있다.
2. 큰 원판이 작은 원판 위에 올려지면 안 된다.
위에 원판이 3개인 하노이 탑을 예로 들면
A => B
A => C
C => B
A => C
B => A
B => C
A => C
이렇게 하면 위에 이미지 처럼 A에 있는 원판이 모두 C로 이동한다.
n개의 원판이 있는 하노이의 탑의 이동 횟수는
T(n) = 2^n - 1
로 나타낼 수 있다.
예)
원판이 4개 있는 하노이의 탑 이동 횟수
T(4) = 2^4 - 1 = 16 - 1 = 15
원판이 5개 있는 하노이의 탑 이동 횟수
T(5) = 2^5 - 1 = 32 - 1 = 31
Q2. 재귀함수란?
재귀 함수는 자기 자신을 호출하여 문제를 해결하는 함수이다.
재귀 함수는 일반적으로 다음 두 가지 구성 요소를 포함한다.
기본 사례(Base Case):
재귀 호출을 멈추는 조건으로,
함수가 더 이상 자신을 호출하지 않고 종료되는 경우이다.
기본 사례는 재귀가 무한히 반복되는 것을 방지한다.
재귀적 사례(Recursive Case):
함수가 자기 자신을 호출하는 부분으로,
문제를 더 작은 하위 문제로 분할하여 해결한다.
코드로 예시를 들겠다.
#include <stdio.h>
int fect(int);
int main(){
int n, i, result=1;
printf("정수 입력 : ");
scanf("%d", &n);
result = factorial(n);
printf("%d! = %d\n", n, result);
return 0;
}
int factorial(int n){
if (n == 1) // 기본 사례
return 1;
else
return n * fect(n - 1); // 재귀적 사례
}
위 코드에 factorial 함수에서 n == 1일 때 기본 사례로 1을 반환한다.
그렇지 않으면 n을 n-1의 팩토리얼과 곱한 값을 반환하는 재귀 호출을 수행한다.
'자료구조' 카테고리의 다른 글
이미지 데이터의 표현 (p27 ~ p28) (0) | 2024.06.11 |
---|---|
원형 큐 삽입, 삭제 예시 (학교 과제, p66) (0) | 2024.06.04 |
스택 코드와 PUSH, POP 과정 (학교 과제, p56) (0) | 2024.04.16 |
자료 구조의 분류 (p17) (0) | 2024.04.15 |
C언어 배열과 파이썬 리스트 차이점 (학교 과제, p48) (0) | 2024.04.14 |