ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [코딩도장] day22. 재귀호출
    IT/파이썬 2020. 9. 13. 16:18

    출처 : unsplash

    ■ 들어가기

    - 파이썬 코딩 도장 (남재윤/길벗). 을 공부하며 정리하는 블로그


    ▶ Unit31. 함수에서 재귀호출 사용하기

         - 31.1 재귀호출 사용하기

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

     

    >> 31.1 재귀호출 사용하기 <<

    - 재귀호출이란? 함수 안에서 함수 자기 자신을 호출하는 방식

    - 자칫 함수가 자기 자신을 계속 호출하면서 무한루프에 빠질 수 있으므로 재귀함수 구현에 조심해야 함

    ( 파이썬에서는 최대 재귀 깊이가 1,000으로 설정되어 있어서 초과할 경우 RecursionError가 발생!)

    소스 (recursive_function_error.py) 결과
    def hello() :
        print('Hello, world!')
        hello()

    hello()
    ...
    Hello, world!
    Traceback (most recent call last):
      File "C:/project/recursive_function_error.py", line 5, in <module>
        hello()
      File "C:/project/recursive_function_error.py", line 3, in hello
        hello()
      File "C:/project/recursive_function_error.py", line 3, in hello
        hello()
      File "C:/project/recursive_function_error.py", line 3, in hello
        hello()
      [Previous line repeated 974 more times]
      File "C:/project/recursive_function_error.py", line 2, in hello
        print('Hello, world!')
    RecursionError: maximum recursion depth exceeded while pickling an object

     

    1. 재귀호출에 종료 조건 만들기

    - RecursionError에 빠지지 않기 위해서는 종료 조건을 만들어야 함

    소스 (recursive_function_exit_condition.py) 결과
    def hello(count) :
        # 종료 조건 생성
        # count가 0이면 다시 hello() 호출하지 않고 종료
        if count == 0 : 
            return

        print('Hello, world!', count)

        count -= 1  # 호출 후 count값을 1 감소
        hello(count)    # hello함수 다시 호출


    hello(5)
    Hello, world! 5
    Hello, world! 4
    Hello, world! 3
    Hello, world! 2
    Hello, world! 1

    출처 : 파이썬 코딩 도장 (dojang.io)

     

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

    - 팩토리얼?? 1부터 n까지 양의 정수를 차례대로 곱한 값이며 !(느낌표) 기호로 표기함

    - 예) 5! = 5 * 4 * 3 * 2 * 1 = 120

    소스 (factorial.py) 결과
    def factorial(n) :
        if n == 1 :     # 종료조건
            return 1    # 1을 반환하고 종료

        return n * factorial(n-1)   # 현재 값(n)에 다음 값(n-1)을 함수에 넣어 반환된 값을 곱


    print(factorial(5))
    120

    출처 : 파이썬 코딩 도장 (dojang.io)

    - factorial(5)를 호출해서 n이 1이 될 때까지 재귀호출 수행

    - 최종적으로 n이 1인 경우 return 1에 의해 1이 반환되면 2와 곱해지고, 다시 반환된 2와 3을 곱하는 식으로 최종 120을 반환

     

     

     

     

     

    댓글

Designed by Tistory.