상태이상 : 호기심 중독

이것저것 알아두면 언젠간 도움이 된다.

코딩/Python!

재귀함수 [Python]

IT코코아 2018. 6. 6. 02:39

재귀 : Recursion - 반복, 되풀이

재귀적이라는 것은 자기 자신을 이용하여 대상을 정의하거나 응용하는 것. 이라고 정보통신기술용어해설에 나와있습니다.

그렇다면 재귀함수란? 함수 자기자신을 이용하여 함수를 정의하는 것을 말합니다.

제가 만든 재귀함수를 이용해 설명하겠습니다.

def func(a) :
    print("{} 번째 함수 실행\n".format(a))

    if(a != 3) : #a가 3가 아닐 경우
        func(a+1) #인수값을 1올려 자신을 다시 호출
        print("{} 번째 함수 종료후 a : {}\n".format(a+1,a))
        print("{} 번째 함수 종료".format(a))

        return
    else : # a가 3가 됐을 때 재귀종료.
        print("{} 번째 함수 종료".format(a))
        return

func(1)

보시면 func()함수 안에 func()가 또 들어가 있는것을 볼 수 있습니다.
이렇게 함수가 실행되어 진행되던중 자기자신을 다시 실행하도록 함수를 설계하는 것을 재귀함수라고 합니다.

함수안에서 함수가 또 실행되고 다시 또 실행되고...
프로그램에서 함수를 호출하여 실행할땐 메모리가 소모 됩니다. 그러면? 재귀함수를 끝내지 않고 계속해서 돌리면 많은 함수의 수가 계속해서 실행되겠죠? 그러면 메모리의 공간이 남아돌지 않겠죠?
그렇기 때문에 파이썬에서는 재귀함수로 불러와지는 함수의 수를 제한하고 제한을 넘어간다면 스택오버플로우가 발생해 에러가 발생하여 프로그램이 종료됩니다.

그렇기 때문에 종료 조건을 꼭 넣어줘야 합니다.

위의 코드를 한번 실행시켜 봅시다.

그림판을 이용해 한번 실행과정을 살펴봅시다!

위의 재귀함수의 종료방법은 if문을 이용해 새로들어온 함수의 인수값을 체크해 인수가 3이면 return으로 종료하도록 만들었습니다.

함수가 종료되면 이전 함수에서 func()이후의 실행문들이 실행됩니다. 그렇기때문에 func()이후에도 return문을 한번 더 넣어 뒤로 돌아가게 해줘야 합니다.

재귀용법을 이용해 for문 대신할 수도 있으니까 짜는 연습하시면 많이 유용하게 사용할 수 있습니다.

반응형

'코딩 > Python!' 카테고리의 다른 글

함수 [Python]  (0) 2018.07.20
NumPy 배열 생성, max(), min() [Python]  (0) 2018.06.08
2차 리스트 [Python]  (0) 2018.05.28
리스트 [Python]  (0) 2018.05.11
튜플 [Python]  (2) 2018.05.11