“Factorial n”을 구하는 재귀 알고리즘을 작성하시오.(90회 정보관리 기술사)

 

 1. 재귀알고리즘의 개념

) 재귀알고리즘의 정의

- 수학적 귀납법을 역순으로 이용하여 자신의 함수를 반복적으로 호출하는 방법

) 재귀알고리즘의 구성 분할 정복

문제의 크기가 N인 큰 문제를 작은 문제로 환원, 이때 작은 문제 역시 큰 문제와 유사함

재귀 호출

Self Call, Boomerang

아주 작은 문제

직접 해결할 정도로 작아짐, 베이스 케이스가 됨

 

 2. 재귀 알고리즘의 작성 절차 및 효율성

) 재귀 알고리즘의 작성 절차

Step1

- 더 작은 문제로 표시할 수 있는지 시도(문제 크기를 하나씩 줄이는 방법, ,반으로 줄이는 방법, 다른 여러 개의 작은 문제의 조합으로 표시하는 방법)

- 문제 크기 파라미터 N을 확인

Step 2

문제를 직접 풀 수 있는 것이 어떤 경우인지 베이스 케이스 확인

Step 3

- N이 줄어서 반드시 베이스 케이스를 만나는지 확인

- N이 양수인지 음수인지, 짝수인지 홀수인지, 또는 부동소수인지 정수인지 모든 경우에 대해 모두 검증.

Step 4

베이스 케이스와 베이스 케이스가 아닌 경우를 나누어서 코드를 작성

 

 ) 재귀 알고리즘의 효율성

- 공간적 비효율(저장공간)

- 시간적 비효율(저장, 복원에 걸리는 시간)

- 가능하다면 반복문으로 대치하는 것이 유리

 

3. 문제에서 제시한 Factorial n 에 대한 풀이

 

) 문제에 대한 해석

n! = n (n-1) (n-2) ... 1 (, 1! = 0! = 1)

 

int Factorial(int n)

 

{           if (n = = 1)

return 1;

else

return(n * Factorial(n-1));

}

 

) 코드로 구현

int Factorial(int n)              팩토리얼

{ int product = 1;              곱셈의 결과 값을 초기화

for (int i = 1; i <= n; i++)           1부터 n까지

product *= i;                계속 곱해서 저장

return product;               결과를 리턴

}

 

4. 재귀 알고리즘의 이용

- 이진 탐색 : 문제 크기의 감소, N, N/2, N/4, , 1

- 문자열 뒤집기

- K 번째 작은 수 찾기

- 피보나치 수열

 

 

'알고리즘' 카테고리의 다른 글

정렬 sort 문제  (0) 2014.12.26
기출 알고리즘  (0) 2014.11.29
by 메렁키키 2014. 12. 26. 21:51

No

기출 문제

비고

1

Bubble Sort 알고리즘에 대하여 다음 내용을 설명하시오. (오름차순 기준)

1)     Flag 를 두지 않는 경우와 Flag 를 두는 경우로 나누어 설명하고, Flag 를 두는 이유를 설명하시오

2)     다음 키 값을 갖는 파일을 Bubble Sort 알고리즘을 적용하여 Sort 하는 과정을 보이시오

(n=8 : 30, 50, 10, 80, 40, 60, 70, 90)

응용 104-2

2

퀵 정렬 (Quick Sort) 알고리즘을 설명하고, 다음 데이터를 퀵 정렬 알고리즘을 사용해서 정렬하는 과정을 설명하시오

30,15,16,24,38,33,17,29,32

관리 99-4

3

다음은 C 언어로 작성된 버블 정렬 (Bubble Sort) 알고리즘 프로그램의 일부이다. 프로그램을 완성하시오

#include <stdion.h>

int main()

{

int data[5] = {2, 5, 1, 4, 3};

bubble(data, 5);

for(int i=0; i<5; i++) {

print("%d ", data[i]);

}

return 0;

}

관리 95-2

4

정렬 (Sorting) 알고리즘의 하나인 삽입 정렬 (Insertion Sorting) 알고리즘을 기술하고 이 알고리즘이 어떤 경우에 효과적인지 설명하시오. 또한 평균 연산 시간 (Big O) 과 최악의 연산 시간을 근거와 함께 설명하시오

관리 90-2

5

정렬 (Sorting) 문제의 하한 (Lower Bound) (n log n) 이라는 것을 증명해 보시오

관리 75-3

'알고리즘' 카테고리의 다른 글

재귀 알고리즘  (0) 2014.12.26
기출 알고리즘  (0) 2014.11.29
by 메렁키키 2014. 12. 26. 18:28

http://www.sorting-algorithms.com/
http://devbot.tistory.com/entry/
http://thrillfighter.tistory.com/210

 

104회 응용

1)2교시- 버블(bubble) 소트

 

99

1)1교시=> 이진탐색트리 에서 데이터 삽입과정

2)4교시=> Quick sort의개념과 사례풀이

 

98

1)4교시=>인공지은 응용정보시스템이나 게임 개발시

        길찾기에 이용되는 Dijkstra A*알고리즘 비교

96

2)1교시=>최소 신장 트리(MST)알고리즘 설명

 

95

1)2교시=>버블 정렬 알고리즘 설명 및 사례

 

90

1)1교시=>재귀 알고리즘

2)1교시=>자료구조 heap을 설명하고 max-heap/min-heap

3)2교시=>삽입 정렬 알고리즘 설명, 효과적인 경우,평균 연산시간과 최악 연산시간

4)4교시=>A*알고리즘을 8-퍼즐 게임에 적용하에 설명하시오

 

89

1)4교시=>알고리즘의 평가방법 인 time complexity space complexity대해서 설명하시오

 

87

1)1교시=>휴리스틱 알고리즘인 A*에 대해 설명하시오

2)1교시=>알고리즘 설계 기법중 [동적 계획법]에 대해서 설명하시오

3)4교시=>MST 개념과 Prim Kruskal 알고리즘을 통한 문제풀이

 

86

1)2교시=> Bzier 곡선 생성 알고리즘

2)4교시=> Banker's 알고리즘

 

84

1)3교시=>Dijkstra 알고리즘을 통한 문제풀이

 

83

1)4교시=>Greedy Method 의 특징, 해를 구하는 절차 및 Knapsack 알고리즘

 

80

1)3교시=>유전자 알고리즘의 특정,절차,활용방법

<미출제 영역>

1.문자열 패턴 탐색의 BEST Practice => 보이어 무어

2.알고리즘 설계 기법의 Base Theory => Back Tracking

'알고리즘' 카테고리의 다른 글

재귀 알고리즘  (0) 2014.12.26
정렬 sort 문제  (0) 2014.12.26
by 메렁키키 2014. 11. 29. 11:12
| 1 |