[Algorithm] 재귀함수

JakkeLab·2023년 11월 11일

Algorithm

목록 보기
1/2
post-thumbnail

예제) 명시적인 반복문(For, foreach, while 등)과 외부 라이브러리, 모듈, 함수(sum 등) 사용하지 않고 "안녕하세요"를 n번 반복해서 출력하고, 그다음엔 "끝났습니다"를 출력하여 실행을 종료하는 코드를 작성하시오.

예제를 풀기전에 재귀함수를 알아봅시다.

텍스트 출처 : 나무위키(https://namu.wiki/w/%EC%9E%AC%EA%B7%80%ED%95%A8%EC%88%98)
그림 : 본인 작성

교수님께 재귀함수가 뭔지 물었더니 계속해서 물어보는 상황이 되어버렸습니다.

"재귀함수가 뭔가요?" 를 말하면 설명해주는 동작이기 때문에
어느순간 "재귀함수가 뭔가요?"를 말하면 다시 또 실행을 하게 됩니다. 그런데, 동작의 끝에서 "재귀함수가 뭔가요?" 라고 말하도록 되어있던 것입니다.

그래서 동작을 끝에 도달했을 때, 또 다시 설명을 시작하게 되고, 또 끝에 도달해서 설명을 시작하게되고, ...

이렇게 무한대로 설명을 해버리는 상황이 발생합니다.
이와 같이 어떤 함수 내에서 자기자신을 다시 참조하는 함수를 말합니다.


가장 기본적인 재귀함수를 만들어 보겠습니다.

def function():
	print(”안녕하세요”)
	function()

#실행결과
안녕하세요
안녕하세요
안녕하세요
...

이렇게 함수 내부에서 언제 자기자신을 호출하지 않을지를 정하지 않으면 계속해서 실행되므로, 무한루프에 빠집니다.

그렇다면 3번만 반복하도록 만들려면 어떻게 해야할까요?

def function(a):
    print("안녕하세요")
    if a < 2:
        a += 1
        function(a)
        
function(0)

#실행결과
안녕하세요
안녕하세요
안녕하세요

이렇게 자기자신을 다시 호출하기 전에 값을 검사하는 조건문을 추가하면 됩니다.


이를 이해하여 맨처음 보았던 예제의 코드를 짜면 아래와 같습니다.

#재귀함수 기초 : 안녕하세요를 반복하기
def function(a, b):
    if (b - 1 < a):
        print("끝났습니다")
    else:
        print("안녕하세요")
        a += 1
        function(a, b)

function(0, 3)

#출력결과
안녕하세요
안녕하세요
안녕하세요
끝났습니다

function(a, b)는 a가 b-1 보다 크지 않을때 까지 1씩 더하면서 자신을 호출하게 됩니다. 그래서 function(0, 3)은 안녕하세요를 3번출력하고 마지막에 끝났습니다를 출력하게 됩니다.

profile
시간을 설계하는 건축가

0개의 댓글