CWN(CHANGE WITH NEWS) - 알고 나면 유용한 알고리즘 정보...#1. 재귀 함수

  • 구름많음고창-4.2℃
  • 구름많음청송군-4.2℃
  • 구름많음순창군-3.4℃
  • 구름조금동해-0.2℃
  • 구름많음보은-6.3℃
  • 구름많음영광군-4.0℃
  • 구름많음금산-5.5℃
  • 구름많음함양군-0.1℃
  • 맑음철원-11.6℃
  • 구름많음고창군-5.0℃
  • 맑음양평-6.4℃
  • 구름조금인천-10.0℃
  • 구름많음진도군-1.5℃
  • 구름많음남원-4.3℃
  • 구름조금여수1.7℃
  • 맑음동두천-9.8℃
  • 구름많음정읍-5.1℃
  • 구름조금홍성-5.1℃
  • 구름조금남해2.5℃
  • 맑음서산-5.9℃
  • 맑음수원-7.7℃
  • 구름많음제천-7.1℃
  • 맑음파주-10.5℃
  • 맑음속초-2.3℃
  • 구름많음천안-6.7℃
  • 눈백령도-8.2℃
  • 구름많음임실-4.3℃
  • 구름조금김해시0.0℃
  • 구름조금강릉-0.8℃
  • 흐림제주2.6℃
  • 구름많음거창-0.1℃
  • 구름많음서귀포8.1℃
  • 구름많음강진군-1.9℃
  • 구름많음고흥0.7℃
  • 맑음양산시1.8℃
  • 구름조금의령군-0.9℃
  • 흐림성산2.1℃
  • 구름많음추풍령-6.6℃
  • 맑음강화-9.5℃
  • 맑음인제-8.1℃
  • 구름조금북창원-0.1℃
  • 구름많음포항1.3℃
  • 구름많음충주-7.0℃
  • 구름많음장흥-1.2℃
  • 구름조금북춘천-8.8℃
  • 구름조금북부산1.6℃
  • 구름많음해남-2.0℃
  • 구름조금북강릉-1.6℃
  • 구름조금창원-0.3℃
  • 구름많음영덕0.8℃
  • 구름많음고산2.1℃
  • 구름많음봉화-4.3℃
  • 구름많음부안-3.9℃
  • 구름많음영천-1.2℃
  • 구름많음경주시-1.1℃
  • 구름많음보령-5.2℃
  • 구름많음영주-4.0℃
  • 구름많음태백-4.0℃
  • 구름많음부산0.5℃
  • 구름많음군산-5.2℃
  • 구름많음부여-5.3℃
  • 구름많음청주-6.7℃
  • 구름조금장수-5.0℃
  • 구름많음안동-4.9℃
  • 흐림흑산도-0.6℃
  • 구름많음세종-6.5℃
  • 구름많음진주2.1℃
  • 구름많음울진1.9℃
  • 구름조금통영1.8℃
  • 구름조금대관령-8.0℃
  • 구름많음상주-5.5℃
  • 구름조금밀양-0.8℃
  • 구름많음원주-7.5℃
  • 맑음이천-6.1℃
  • 맑음정선군-5.8℃
  • 구름조금순천-2.0℃
  • 구름많음문경-4.6℃
  • 구름많음광양시2.1℃
  • 구름많음거제0.6℃
  • 구름많음의성-3.7℃
  • 구름조금울산-0.5℃
  • 구름조금영월-5.3℃
  • 맑음합천-0.2℃
  • 구름많음전주-5.3℃
  • 구름조금광주-1.9℃
  • 구름많음완도0.7℃
  • 맑음춘천-7.4℃
  • 구름많음구미-3.8℃
  • 눈울릉도-2.2℃
  • 맑음홍천-7.9℃
  • 맑음서울-9.1℃
  • 구름조금산청0.6℃
  • 구름많음서청주-6.7℃
  • 구름많음보성군0.7℃
  • 구름많음대전-6.0℃
  • 구름조금목포-3.5℃
  • 구름많음대구-1.5℃
  • 2026.01.20 (화)

알고 나면 유용한 알고리즘 정보...#1. 재귀 함수

김가언 / 기사승인 : 2021-05-28 13:38:23
  • -
  • +
  • 인쇄

재귀는 주어진 문제를 해결하기 위하여 하나의 함수에서 자신을 다시 호출하여 작업을 수행하는 방식을 말한다. 즉, 재귀 함수는 자기 자신을 다시 호출하는 함수이다.

재귀 함수의 간단한 예시로 1부터 n까지 양의 정수를 차례로 곱한 값인 팩토리얼을 언급할 수 있다. 아래의 코드를 살펴보자.

재귀함수를 이용한 펙토리얼 예제
재귀함수를 이용한 펙토리얼 예제

위의 코드는 n부터 1씩 감소하면서 재귀 함수를 호출하고, n이 1이 되었을 때 재귀 함수 호출을 중단하는 코드이다. 이때, 재귀 함수의 호출을 중단하는 종료 조건은 n이 1인 경우이다. 종료 조건을 제대로 명시하지 않으면 함수가 계속 호출되므로 주의해야한다.

재귀 함수의 호출을 중단하면 차례로 결괏값을 자신을 부른 함수에 반환한다. 이를 반환값이라고 한다. 위 코드를 보면 n이 1이 아닐 때, return n*factorial(n-1)를 반환한다는 것을 알 수 있을 것이다. 따라서 자신이 부른 함수 factorial(n-1)이 종료되기 이전에는 계산 결과를 알 수 없다.

이번에는 factorial(4)를 호출한다고 가정해보자. n이 1이 아니므로 4*factorial(3)을 호출하게 된다. 이어, 3*factorial(2)를 호출하며, 그다음으로 2*factorial(1)을 호출한다. 그리고, factorial(1)을 호출하며 종료될 것이다. 이제 n이 1이 되었으므로 factorial(1)은 1을 반환하고, 그 뒤에 2*1을 하여 2를 반환한다. 다시 3*2를 하여 6을 반환하고, 6*4를 하여 24를 반환하면서 종료될 것이다.

모든 재귀 함수는 반복문으로도 구현할 수 있다. 그러나 반복문보다 느리면서 메모리를 많이 차지한다는 단점이 있다.

그런데도 재귀 함수를 사용하는 이유는 무엇일까? 재귀 함수를 사용하면 복잡한 알고리즘을 간결하게 작성할 수 있으며, 변수 사용을 줄여주며 이는 프로그램의 오류 발생할 가능성을 줄인다는 장점이 있기 때문이다.

반복문보다 재귀함수로 구현하기 좋은 예시로는 무엇이 있을까? 그 대표적인 예시는 아래와 같다.

▲ 배열의 합을 구할 때
▲ 등차수열의 합을 구할 때
▲ 피보나치 수열을 구할 때
▲ 하노이 타워 문제를 해결할 때
▲ 순차탐색을 할 때
▲ 이전 단계의 결과를 다음 단계에서 사용할 때

[저작권자ⓒ CWN(CHANGE WITH NEWS). 무단전재-재배포 금지]

최신기사

뉴스댓글 >

- 띄어 쓰기를 포함하여 250자 이내로 써주세요.
- 건전한 토론문화를 위해, 타인에게 불쾌감을 주는 욕설/비방/허위/명예훼손/도배 등의 댓글은 표시가 제한됩니다.

댓글 0

Today

Hot Issue