재귀함수란 무엇일까? (맛난건가,,)

SOCICAL·2025년 1월 9일
0

파이썬을 공부하면서 재귀함수에 대해서 알게되었는데

맛이 있지는 않다,,,이건 한 번에 이해가 안됨,,ㅠㅠ

그래서 알게된 내용을 정리하면서 이해해 보려고 한다 !!

# 재귀 함수(recursion function)란?

  • 함수 안에 자신의 함수를 다시 호출하는 함수
def countdown(n):
	if n <= 0:
    	print('발사!')
    else:
    	print(n)
        countdown(n-1)

countdown() 함수의 작동 방식은 다음과 같다

  • n이 0 이하인 경우: '발사!' 출력
  • n이 양의 정수인 경우: n을 출력한 다음 바로 countdown(n-1) 호출

n이 양수인 경우 동일한 함수가 호출되지만 인자가 1 감소하고 결국 n이 되어 더 이상 함수를 호출할 수 없어 실행이 멈추게 된다. 예를 들어 count(3)을 호출하면 다음처럼 실행된다.

countdown(3)

# Output
3
2
1
발사!

# 기저 조건과 무한 재귀

  • 더 이상 재귀 호출이 발생하지 않도록 하는 경우를 기저 조건이라고 한다.
  • 기저 조건을 갖지 않은 함수를 실행하면 다음과 같은 이슈가 발생한다.
def count_infinitely(n):
	print(n)
    count_finitely(n+1)
   
 count_infinitely() # 함수 선언
 
 # Output
 Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in count_infinitely
  File "<stdin>", line 3, in count_infinitely
  File "<stdin>", line 3, in count_infinitely
  [Previous line repeated 992 more times]
  File "<stdin>", line 2, in count_infinitely
RecursionError: maximum recursion depth exceeded while calling a Python object

다음과 같이 에러가 발생하게 된다,,,,
파이썬은 최대 재귀 한도(Maximum recursion depth)를 정해 허용되는 재귀 호출의 최대 빈도 횟수를 지정하는 특징을 가고 있다.
(* 파이썬 버전과 운영체제 등에 따라 다르며, 필요에 따라 조정도 가능)

0개의 댓글