Python 재귀 함수 개념: 초보자를 위한 Python 자습서
게시 됨: 2020-03-18컴퓨터 과학의 세계에서 재귀는 사물을 자체 용어로 정의하는 기술을 말합니다. 즉, 재귀 함수는 처리를 위해 자신을 호출합니다. 이 기사에서는 21세기에 널리 사용되는 프로그래밍 언어인 Python에서 재귀 함수 의 개념을 이해합니다 .
목차
파이썬 재귀 는 무엇입니까 ?
파이썬에서는 특정 작업을 수행하는 관련 명령문의 그룹을 '함수'라고 합니다. 따라서 함수는 프로그램을 더 작은 덩어리로 나눕니다. 그리고 함수가 파이썬에서 다른 함수를 호출할 수 있다는 것은 일반적인 지식입니다.
그러나 일부 다른 함수는 스스로를 호출할 수 있습니다. 이를 재귀 함수라고 합니다. 서로 마주보고 있는 두 개의 평행 거울을 고려하십시오. 이제 미러 사이에 유지되는 모든 객체는 재귀적으로 반사됩니다.
재귀 함수의 작동을 명확하게 이해하기 위해 재귀 함수에 대해 자세히 살펴보겠습니다.
재귀 함수
우리는 파이썬의 재귀 함수가 자기 참조 표현을 통해 정의된 대로, 즉 자체적으로 자신을 호출한다는 것을 알고 있습니다. 특정 조건이 충족되어 값이나 결과를 반환할 때까지 동작을 계속 반복합니다. 이제 작동 방식을 알아보기 위해 예제를 살펴보겠습니다.
더 읽어보기: Python 인터뷰 질문 및 답변
정수의 계승을 찾고 싶다고 가정합니다. 계승은 1에서 시작하여 해당 정수까지의 모든 숫자의 곱일 뿐입니다. 예를 들어, 5의 계승(5!로 작성)은 1*2*3*4*5*6, 즉 720이 됩니다. 다음과 같이 정의된 재귀 함수 calc_factorial(x)이 있습니다.
def calc_factorial(x):
# 정수의 계승을 찾는 재귀 함수
x == 1인 경우:
반환 1
또 다른
반환 (x * calc_factorial(x-1))
이 함수를 4와 같은 양의 정수로 호출하면 어떻게 될까요? 음, 각 함수 호출은 기본 케이스에 도달할 때까지 스택 프레임을 추가합니다(숫자가 1로 감소할 때). 재귀가 종료되고 무한정 계속되지 않도록 기본 조건이 필요합니다. 따라서 주어진 경우에 네 번째 호출 후에 값 24가 반환됩니다.
파이썬에서 재귀 함수의 구현
파이썬에서 재귀 함수의 다양한 응용 프로그램이 있을 수 있습니다. 예를 들어 Koch 눈송이와 같이 반복되는 패턴으로 그래픽을 만들고 싶습니다. 재귀는 동일한 디자인의 더 작은 버전으로 구성된 프랙탈 패턴을 생성하는 데 사용할 수 있습니다.
또 다른 예는 게임 해결입니다. 스도쿠와 수많은 복잡한 게임을 풀기 위한 재귀 알고리즘을 작성할 수 있습니다. 재귀는 검색, 정렬 및 순회 문제에서 가장 일반적으로 사용됩니다.
이 함수의 두드러진 특징은 재귀 구현이 역추적을 허용한다는 것입니다. 따라서 재귀는 솔루션을 점진적으로 구축하고 어떤 단계에서든 문제 제약 조건을 충족하지 않는 솔루션을 제거하는 것입니다. 이를 달성하기 위해 두 가지가 필요합니다. 상태 유지와 적절한 데이터 구조입니다. 이 용어에 익숙해지려면 계속 읽으십시오.
읽기: 인도의 Python 개발자 급여
상태 유지
Python의 각 재귀 호출에는 고유한 실행 컨텍스트가 있습니다. Python에서 재귀 함수를 처리하는 동안 각 재귀 호출을 통해 상태를 스레드해야 합니다. 이를 통해 현재 상태는 현재 호출의 실행 컨텍스트의 일부가 됩니다. 상태를 전역 범위로 유지할 수도 있습니다.
예를 들어 재귀를 사용하여 1+2+3+4+…….+10을 계산하는 경우. 여기에 추가하는 현재 숫자와 해당 지점까지 누적된 합계가 유지해야 하는 상태를 형성합니다. 상태를 유지하려면 업데이트된 현재 상태를 각 호출을 통해 인수로 전달해야 합니다. 방법은 다음과 같습니다.
def sum_numbers(현재_숫자, 누적된_합계)
#기본 케이스
# 최종 상태 반환
현재 번호==11인 경우:

누적 합계 반환
#재귀적 케이스
#재귀 호출을 통해 상태 스레드
또 다른:
return sum_numbers(current_number + 1, stored_sum + current_number)
또는 전역 가변 상태를 사용할 수 있습니다. 이 방법을 사용하여 상태를 유지하려면 전역 범위에서 상태를 유지합니다.
현재 번호 = 1
누적 합계 = 0
def sum_numbers():
전역 current_number
글로벌 누적 합계
#기본 케이스
current_number==11인 경우
누적 합계 반환
#재귀적 케이스
또 다른:
누적 합계 = 누적 합계 + 현재 숫자
현재 번호 = 현재 번호 + 1
sum_numbers() 반환
재귀 데이터 구조
데이터 구조는 그 자체의 더 작고 단순한 버전으로 정의될 수 있는 경우 재귀적인 것으로 간주됩니다. 재귀 데이터 구조의 예로는 목록, 트리, 계층 구조, 사전 등이 있습니다. 목록에는 다른 목록이 요소로 포함될 수 있습니다. 트리에는 하위 트리, 리프 노드 등이 있습니다.
재귀 함수의 구조는 종종 입력으로 사용하는 데이터 구조를 따라 모델링된다는 점에 유의하는 것이 중요합니다. 따라서 재귀 데이터 구조와 재귀 함수는 함께 사용됩니다.
피보나치 계산의 재귀
이탈리아 수학자 피보나치(Fibonacci)는 13세기에 토끼의 인구 증가를 모델링하기 위해 처음으로 피보나치 수를 정의했습니다. 그는 첫해에 한 쌍의 토끼를 시작으로 특정 연도에 태어난 토끼 쌍의 수는 지난 2년 동안 각각 태어난 토끼 쌍의 수와 같다고 추론했습니다. 이것은 다음과 같이 쓸 수 있습니다. Fn = Fn-1 + Fn-2(기본 사례: F0=1 및 F1=1).
피보나치 수를 계산하기 위해 재귀 함수를 작성하면 순진한 재귀가 발생할 수 있습니다. 이것은 재귀 함수의 정의를 순진하게 따랐을 때 발생하며 불필요하게 값을 다시 계산하게 됩니다. 재계산을 피하기 위해 lru_cache 데코레이터를 함수에 적용할 수 있습니다. 결과를 캐시하고 프로세스가 비효율적이 되는 것을 방지합니다.
더 읽어보기: 모든 Python 개발자가 알아야 할 상위 10가지 Python 도구
재귀의 장단점
재귀는 복잡한 작업을 하위 문제로 분할하여 단순화하는 데 도움이 됩니다. 재귀 함수는 코드를 더 깔끔하게 만들고 시퀀스 생성을 복잡하게 만들지 않습니다. 그러나 재귀는 제한 없이 오지 않습니다. 때때로 호출은 많은 시간과 메모리를 사용하므로 비용이 많이 들고 비효율적일 수 있습니다. 재귀 함수도 디버그하기 어려울 수 있습니다.
마무리
이 기사에서 우리는 Python 재귀 의 개념을 다루었 고 몇 가지 예를 사용하여 이를 시연했으며 장점과 단점에 대해서도 논의했습니다. 이 모든 정보를 가지고 다음 Python 인터뷰에서 재귀 함수를 쉽게 설명할 수 있습니다!
데이터 과학에 대해 자세히 알아보려면 IIIT-B & upGrad의 데이터 과학 PG 디플로마를 확인하세요. 이 PG 디플로마는 실무 전문가를 위해 만들어졌으며 10개 이상의 사례 연구 및 프로젝트, 실용적인 실습 워크숍, 업계 전문가와의 멘토링, 1- 업계 멘토와 일대일, 400시간 이상의 학습 및 최고의 기업과의 취업 지원.
재귀가 왜 그렇게 중요한가?
당신이 프로그래머라면 재귀적으로 생각하는 것이 매우 중요합니다. 그 이유는 재귀 함수가 복잡한 프로그램을 더 작은 프로그램으로 분해하는 데 도움이 되기 때문입니다. 또한 재귀 솔루션이 반복 솔루션에 비해 훨씬 읽기 쉽습니다.
특정 프로그램이 작동하기 위해 엄청난 양의 공간과 코드 줄을 차지하는 것을 종종 볼 수 있습니다. 필요할 때마다 함수가 계속해서 호출되도록 재귀 함수를 추가하여 이러한 프로그램을 단순화할 수 있는 몇 가지 시나리오가 있습니다. 따라서 코드를 너무 많이 추가로 작성할 필요가 없으며 작업도 효과적으로 완료됩니다.
재귀의 응용 프로그램은 무엇입니까?
컴퓨팅 기능과 실생활에서 볼 수 있는 재귀의 실용적인 응용 프로그램이 많이 있습니다. 재귀를 사용하지 않으면 숫자가 회문인지 여부를 결정하고 프랙탈 유형을 그리는 등의 피보나치 수열, Ackermann 함수와 같은 특정 수학 함수를 표현할 수 없습니다.
이러한 수학 함수를 통해 구축된 여러 소프트웨어와 앱이 있습니다. 예를 들어 Candy Crush는 이러한 수학 함수와 재귀를 사용하여 타일 조합을 생성합니다. 그 외에도 체스는 재귀를 적용한 고전적인 예이기도 합니다. 오늘날 우리가 사용하는 대부분의 검색 알고리즘도 재귀를 사용합니다.
재귀의 기본 규칙은 무엇입니까?
재귀 함수는 복잡한 문제를 다른 작은 단계로 단순화하여 해결하기 위해 스스로를 호출할 수 있는 함수입니다. 재귀에는 네 가지 기본 규칙이 있습니다. 재귀의 도움 없이 해결할 수 있는 기본 사례가 있어야 합니다. 재귀적으로 해결해야 하는 모든 경우는 항상 기본 사례를 향해 진행해야 합니다. 모든 재귀 호출이 작동한다고 가정하기 위해 설계 규칙에서 귀납법에 의한 증명을 사용합니다. 문제의 동일한 인스턴스를 해결하기 위해 별도의 재귀 호출을 사용해서는 안됩니다. 대신 동적 프로그래밍을 사용해야 합니다.