1 / 20

2 장 . 재귀 (recursion) 1 절 . 재귀함수의 개념 2 절 . 팩토리얼함수 3 절 . 피보나치 수열 4 절 . 하노이 탑

2 장 . 재귀 (recursion) 1 절 . 재귀함수의 개념 2 절 . 팩토리얼함수 3 절 . 피보나치 수열 4 절 . 하노이 탑. 이 완 직 ( wjlee@pnu.ac.kr ) 2010 년 1 학기. 1. 재귀함수 개념. 재귀함수 (Recursive Function) 함수 내부에서 자신의 함수를 다시 호출하는 함수 이러한 호출을 재귀호출 (recursive call) 이라 함 재귀호출의 사례

dana-holman
Download Presentation

2 장 . 재귀 (recursion) 1 절 . 재귀함수의 개념 2 절 . 팩토리얼함수 3 절 . 피보나치 수열 4 절 . 하노이 탑

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 2장. 재귀(recursion)1절. 재귀함수의 개념 2절. 팩토리얼함수 3절. 피보나치 수열 4절. 하노이 탑 이 완 직 (wjlee@pnu.ac.kr) 2010년 1학기

  2. 1. 재귀함수 개념 • 재귀함수 (Recursive Function) • 함수 내부에서 자신의 함수를 다시 호출하는 함수 • 이러한 호출을 재귀호출(recursive call)이라 함 • 재귀호출의 사례 • 팩토리얼, 피보나치수열, 이항계수, 하노이의 탑, 이진 탐색 등

  3. 2. 팩토리얼함수 • 팩토리얼(Factorial) 예 • 5! = 5 * 4 * 3 * 2 * 1 • 팩토리얼을 일반화하여 하나의 공식으로 표현할 수 있고,1이 나올 때까지 1씩 감소해가며 곱해서 누적하여 구해진다.

  4. 2.1 재귀함수 구현 • [예제 2-1] 팩토리얼을 구하는 재귀함수

  5. 2.1 재귀함수 구현 • 재귀함수 동작원리

  6. 2.1 재귀함수 구현 • 팩토리얼 재귀함수의 호출 순서 • [개념 다지기 2-1] 직접풀어 볼 것.

  7. 2.2 재귀함수와 스택 • 재귀함수 장점: • 복잡한 프로그램을 간결하게 작성할 수 있다. • 가독성이 높다. (?) • 재귀함수의 단점 • 메모리 소비가 높다. • 함수 내부에서 사용되었던 변수(스택) • 변수에 할당된 메모리 해제 이전에 (자신의) 함수를 다시 호출한다. 따라서 새로운 함수의 변수를 위해 메모리 할당이 다시 수행 • 시스템(운영체제)의 함수 리턴 주소 저장(스택) • 재귀호출은 함수 리턴 이전에 새 함수를 연속적으로 호출함으로 리턴할 주소를 기억하는 운영체제 영역의 스택도 소비됨

  8. 2.2 재귀함수와 스택 • [예제 2-2] 재귀함수와 스택 • 교재 [그림 2-11] 참조 (매개 변수를 위한 스택 소모)

  9. 2.3 재귀 함수의 성능 • [예제 2-3] 개념 다지기 2-2의누적 합 구하기의 반복문 구현

  10. 2.3 재귀 함수의 성능 • [예제 2-4] 팩토리얼 구하기 반복문 구현

  11. 2.3 재귀 함수의 성능 • 재귀함수 .vs. 반복문 • 성능 (수행시간) • 재귀함수는 동일한 함수가 여러 번 호출됨에 따라, 함수 호출 시점에 복귀 주소 저장(스택), 호출 종료 시 복귀주소로 리턴을 반복 • 따라서 수행 시간이라는 성능 측면에서도 반복문이 우수 • 재귀함수 사용 이유 • 간결하게 프로그램을 작성할 수 있음 • 특정 문제는 재귀함수로만 구현 가능 (트리 순회 알고리즘) A B C D E F G H I J

  12. 3. 피보나치 수열 • 제1항과 제2항을 1이라 하고, 제3항부터는 차례로 앞의 두 항의 합을 취하는 수열을 말한다. • fib(n)를 구하기 위해서는 • fib(n-1)와 fib(n-2)를 알아야 하므로 재귀적인 호출이 두 번 일어나야 한다.

  13. 3. 피보나치 수열 • [예제 2-5] 피보나치 수열을 재귀함수로 구현

  14. 3. 피보나치 수열 • [예제 2-6] 피보나치 수열 반복문으로 구현

  15. 4. 하노이 탑 • 하노이의 탑(Tower of Hanoi)의 규칙 • a, b, c라는 세 개의 봉이 있다. • a의 봉에 도넛형 원반이 n장 끼워져 있다. • (위쪽 직경이 짧다) • 이 원반을 모두 c의 봉으로 옮긴다. • 단 원반은 한 번에 한 장씩만 이동한다. • 큰 원반을 작은 원반 위에 올려놓아서는 안 된다.

  16. 시작봉(a)에서 2의 원반을 작업봉(b)으로 이동한다. (중간 원반을 이동) 4. 하노이 탑 • 시작봉(a)에서 1의 원반을 목적봉(c)으로 이동한다. (작은 원반을 이동)

  17. 목적봉(c)에서 1의 원반을 작업봉(b)으로 이동한다. (작은 원반을 중간 원반 위에 올려놓음) 4. 하노이 탑 • 시작봉(a)에서 3의 원반을 목적봉(c)으로 이동한다. (큰 원반을 이동)

  18. 작업봉(b)에서 1의 원반을 시작봉(a)으로 이동한다. (작은 원반을 이동) 4. 하노이 탑 • 작업봉(b)에서 2의 원반을 목적봉(c)으로 이동한다. (중간 원반을 이동)

  19. 시작봉(a)에서 1의 원반을 목적봉(c)으로 이동한다. (작은 원반을 이동) 4. 하노이 탑 • 일반화하여 n개의 원반을 이동하는 방법을 정리해보자. ❶ 시작봉(a)의 원반 n-1개를 작업봉(b)으로 옮긴다. (장애물을 제거한 뒤) ❷ 시작봉(a)의 원반 n을 목적봉(c)으로 옮긴다. ❸ 작업봉(b)의 원반 n-1을 목적봉(c)으로 옮긴다. (장애물을 되돌려놓는다)

  20. 4. 하노이 탑 • [예제 2-7] 하노이 탑 프로그램

More Related