-
[코딩도장] day22. 재귀호출IT/파이썬 2020. 9. 13. 16:18
■ 들어가기
- 파이썬 코딩 도장 (남재윤/길벗). 을 공부하며 정리하는 블로그
▶ 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 object1. 재귀호출에 종료 조건 만들기
- 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! 12. 재귀호출로 팩토리얼 구하기
- 팩토리얼?? 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 - factorial(5)를 호출해서 n이 1이 될 때까지 재귀호출 수행
- 최종적으로 n이 1인 경우 return 1에 의해 1이 반환되면 2와 곱해지고, 다시 반환된 2와 3을 곱하는 식으로 최종 120을 반환
'IT > 파이썬' 카테고리의 다른 글
[코딩도장] day23. 클로저 사용하기 (0) 2020.09.16 [코딩도장] day22. 파이썬 람다 표현식 - map, filter, reduce (0) 2020.09.13 [코딩도장] day21. 함수에서 위치 인수와 키워드 인수 사용하기 (0) 2020.09.12 [코딩도장] day21. 파이썬 함수 사용하기 (0) 2020.09.12 [코딩도장] day20. 회문 판별과 N-gram 만들기 (0) 2020.09.12