ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TIL. 27 재귀 호출(recursive call)
    TIL 2020. 11. 4. 13:19
    728x90

    ## 함수에서 재귀호출 사용하기

    ## 재귀호출 (recursive call) : 함수 안에서 자기자신을 호출하는 방식을 재귀호출이라 한다.

    ## 일반적인 상황에서는 사용되지 않지만 알고리즘을 구현할때 매우 유용하다 (구현 == 만들다와 같은 뜻)

    ## 보통 알고리즘에 따라서 반복문으로 구현한 코드보다 좀 더 직관적이고 이해하기 쉬운 경우가 많다.

    def helllo():
        print('hello mun')
        helllo()
    
    helllo()
    

    ## helllo 함수 안에서 자기 자신을 호출하고 있는 상황이다.

    ## 무한루프 처럼 작동하다가 어느 순간 error가 발생하는데

    ## 이유는 파이썬에서는 최대 재귀 깊이(maximum recursion depth)가 1,000 으로 정해져있기 때문이다.

    ## 즉, hello 함수가 자기 자신을 계속 호출하다가 최대 재귀 깊이를 초과하기 때문에 error 가 발생한다.

    이러한 현상을 재귀호출의 스택 넘침 현상이라 한다.

     


    ## 재귀 호출을 사용할 경우 반드시 종료 조건을 만들어 주어야 한다.

    def hello(count):
    
        if count == 0 :   # 종료 조건, count 가 0이면 hello 함수를 호출 하지 않고 끝냄.
    
            return
    
        print('hello, hello', count)
    
        count -= 1
    
        hello(count)
    
    
    
    hello(5)
    
    # hello, hello 5
    
    # hello, hello 4
    
    # hello, hello 3
    
    # hello, hello 2
    
    # hello, hello 1
    
    

     

    ## 여기서 종료 조건인 

    ## if count = 0:

    ##    return     // count 가 0이면 return  되돌아 가세요 라는 의미인데, 

           if문 이 참이되어 아래 print가 실행되지 않고 함수가 종료된다.

    ## hello (5) 로 hello 함수를 총 6번 루프가 돌아가며 print는 5번 실행된다.1 => 52 => 43 => 34 => 25 => 16 => return으로 종료


    ## 재귀호출로 팩토리얼 구하기

    def factorial(n):
        if n == 1:
            return 1
        return(n * factorial(n-1))     #return 위치 주의
    
    print(factorial(5))
    ::
    120

    5! = 5 x 4 x 3 x 2 x 1 이다.

    ### 여기서 마지막 1! 값if 조건문의 반환 값 1로써, 함수를 중단시키는 조건이자 마지막 1!의 값을 준다.


    ## 위 함수를 호출 및 반환하는 과정이다.

     

    ## 총 5번의 호출과 5번의 반환으로 원하는 값을 반환할 수 있다.

    728x90
Designed by Tistory.