English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Python 기본 튜토리얼

Python 흐름 제어

Python 함수

Python 데이터 타입

Python 파일操作

Python 객체와 클래스

Python 날짜와 시간

Python 고급 지식

Python 참조 가이드

Python 재귀(Recursion)

이 문서에서는 재귀 함수(자신을 호출하는 함수)를 만드는 방법을 배울 것입니다。

Python에서 재귀는 무엇인가요?

재귀는 자신을 정의하는 과정입니다。

물리 세계의 예제는 두 쌍의 평행镜子에 대한 것입니다. 그들 사이의 어떤 물체도 재귀적으로 반사됩니다。

Python 재귀 함수

Python에서는함수기타 함수를 호출할 수 있습니다. 함수는 자신을 호출할 수 있습니다. 이러한 유형의 구조는 재귀 함수로 불립니다。

아래는 정수의 인수를 찾는 재귀 함수 예제입니다。

숫자의 인수는1해당 숫자에 대한 모든 정수의 곱의 합입니다. 예를 들어, 인수는6(표시되어)6!(표시되어)는1 * 2 * 3 * 4 * 5 * 6 = 720

재귀 함수 예제

def calc_factorial(x):
    """이것은
    정수의 인수 함수의 재귀 함수 """
    if x == 1:
        return 1
    else:
        return (x * calc_factorial(x-1))
num = 4
print("의자리수의 계산 결과는", num, "입니다", calc_factorial(num))

위의 예제에서 calc_factorial()은 재귀 함수이며 자기를 호출합니다.

이 함수를 정수로 호출할 때, 수를 줄이며 재귀적으로 호출됩니다.

각 함수는 숫자를 숫자 아래의 숫자의 계승까지 곱합니다.1。이 재귀 호출은 다음 단계에서 설명할 수 있습니다.

calc_factorial(4) # 1st 호출로 4
4 * calc_factorial(3) # 2nd 호출로 3
4 * 3 * calc_factorial(2) # 3rd 호출로 2
4 * 3 * 2 * calc_factorial(1) # 4th 호출로 1
4 * 3 * 2 * 1                  # return from 4th 호출로 숫자 =1
4 * 3 * 2                      # return from 3rd 호출
4 * 6                          # return from 2nd 호출
24                             # return from 1st 호출

이 때, 숫자가1이 때, 재귀가 끝납니다. 이를 기본 조건이라고 합니다.

각 재귀 함수는 재귀를 중지하는 기본 조건을 가져야 합니다. 그렇지 않으면 함수는 자기 자신을 무한히 호출합니다.

파이썬 인터프리터는 무한 재귀를 방지하고 스택 오버플로우를 유발하지 않도록 재귀의 깊이를 제한합니다.

기본적으로, 최대 재귀 깊이는 1000。제한을 초과하면 RecursionError가 발생합니다. 이러한 조건을 보여드리겠습니다.

def recursor():
    recursor()
recursor()

출력 결과

Traceback (최근 호출이 마지막):
  File "<string>", 줄 3, <module>
  File "<string>", 줄 2, a
  File "<string>", 줄 2, a
  File "<string>", 줄 2, a
  [이전 줄 반복 996 more times]
RecursionError: 최대 재귀 깊이 초과

재귀의 장점

  1. 재귀 함수는 코드를 깔끔하게 보이게 합니다.

  2. 재귀를 사용하여 복잡한 작업을 더 간단한 서브 문제로 분할할 수 있습니다.

  3. 중첩 중첩보다 재귀를 사용하여 시퀀스를 생성하는 것이 더 쉽습니다.

재귀의 단점

  1. 때로는 재귀 뒤에 있는 논리를 추적하는 것이 어렵습니다.

  2. 재귀 호출은 비싸다(효율이 낮습니다),因为这些它们占用大量的内存和时间。

  3. 재귀 함수는 디버깅이 어렵습니다.