순환과 반복

#1 정의

어떤 알고리즘이나 함수가 자기 자신을 호출하여 문제를 해결하는 프로그래밍 기법이다.

#2 내부동작

순환을 이해하기 위해서는 함수의 호출 과정을 이해하고 있어야한다. 함수가 자기 자신을 호출하는 것은 다른 함수를 호출하는 것과 과정이 동일하다.

  • 함수 호출
  • 내부 동작 실행
  • 실행 중 함수를 호출하게 됨
  • 해당 함수를 실행
  • 이하 생략…

#3 알고리즘의 구조

순환 알고리즘은 자기 자신을 순환적으로 호출하는 부분순환 호출을 멈추는 부분으로 구성되어 있다.

def factorial(n:int):
	if n <= 1: # 순환을 멈추는 부분
			return 1
	else: # 순환적으로 호출하는 부분
			return n * factorial(n-1)

#4 순환과 반복

반복이란 for, while과 같이 반복구조로 되풀이되는 방법이다. 순환은 순환적인 문제나 자료구조를 다루는 프로그램에 적합하다. 반복은 순환으로 순환은 반복으로 표현할 수 있다. 특히 순환이 꼬리 순환으로 표현되는 경우에 반복으로 쉽게 표현할 수 있다.

#5 순환의 원리

분할정복이란 주어진 문제를 더 작은 동일한 문제들로 분해하여 해결하는 기법이다. 순환알고리즘은 분할정복을 기반으로 한다. 순환 알고리즘은 자기 자신을 호출 할 때 문제가 동일한 형태로 크기는 작아진다. 문제의 일부를 해결한 다음 나머지 문제에 대해 순환 호출을 한다.

#6 순환의 성능

순환 알고리즘으로 작성 된 프로그램은 이해하기도 쉽고 가독성이 있다. 하지만 함수 호출 시 스택에 쌓는 오버헤드도 생기기 때문에 동일한 논리의 반복문과 비교할 때 시간과 공간을 더 소모한다.

#7 순환을 활용하는 문제

  • 피보나치 수열의 계산
  • 펙토리알 수의 계산
  • 하노이 탑 문제