Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

파이썬 재귀:가이드

파이썬 재귀를 사용하는 방법

Python 재귀는 초보자에게 위협적인 주제입니다. 재귀를 정의함으로써 재귀가 어렵다는 신화를 없애자. 재귀는 함수가 자신을 호출하는 프로그래밍 방법입니다.

간단하게 들리죠? 익숙해지면 재귀는 어려운 개념이 아닙니다.

이 파이썬 튜토리얼에서는 재귀와 그것이 어떻게 작동하는지에 대해 이야기할 것입니다. 이 프로그래밍 방법을 시작하는 데 도움이 되도록 계승 함수를 사용하는 재귀의 예를 살펴보겠습니다.

재귀란 무엇입니까?

재귀는 자체적으로 무언가를 정의하는 곳입니다.

재귀 함수는 자신을 다시 호출하여 문제를 해결합니다. 이 동작은 Python과 같은 대부분의 주요 프로그래밍 언어에서 지원됩니다. 그들은 컴퓨터 과학 및 데이터 과학의 중요한 부분입니다.

재귀는 문제에 대한 솔루션을 모두 동일한 공식을 사용하는 더 작은 문제로 분해하여 찾을 수 있을 때 유용합니다. 이러한 유형의 문제를 종종 "재귀 알고리즘"이라고 합니다. 문제를 해결하는 열쇠는 이름에 있습니다!

반복 대 재귀

알고리즘을 푸는 방법에는 반복 또는 재귀의 두 가지가 있습니다.

알고리즘에 대한 반복적인 솔루션은 "강력하지만 추악한" 것으로 간주됩니다. 그들은 일을 끝내지만 가장 우아한 방식으로 일을 하지는 않습니다. 재귀 알고리즘을 제대로 이해하려면 반복 함수를 살펴볼 필요가 있습니다.

참가자의 81%는 부트캠프에 참석한 후 기술 직업 전망에 대해 더 자신감을 느꼈다고 말했습니다. 지금 부트캠프에 참여하십시오.

부트캠프 졸업생은 부트캠프 시작부터 첫 직장을 찾는 데까지 6개월도 채 걸리지 않았습니다.

반복 함수는 루프를 사용하여 문제를 해결하는 함수입니다. 루프가 완료될 때까지 루프 내부의 코드를 실행합니다. 재귀 함수는 문제를 더 작은 부분으로 분해하고 자신을 호출하여 각 부분을 해결하는 함수입니다.

팩토리얼:반복 예제

계승은 재귀와 반복적 사고를 보여주는 좋은 방법입니다. 수학에서 계승은 숫자와 곱하기 전의 모든 숫자의 합입니다.

5의 계승은 5 * 4 * 3 * 2 * 1과 같습니다. 2의 계승은 2 * 1과 같습니다.

계승을 계산하기 위해 반복 함수를 작성할 수 있습니다.

def factorial(number):
	total = 1
	for n in range(1, number + 1):
		total = total * n
	return total

이 함수는 for 루프를 사용하여 1 범위에 있는 모든 숫자와 지정한 숫자에 1을 더한 값을 반복합니다. 각 반복에 대해 루프가 반복하는 숫자에 합계를 곱합니다. 계승을 찾기 위해 함수를 호출해 봅시다.

answer = factorial(4)
print(answer)

코드는 다음을 반환합니다. 24. 이 솔루션에 도달하기 위해 코드는 다음을 실행합니다.

  • 1 * 1 =1
  • 2 * 2 =4
  • 4 * 3 =8
  • 8 * 4 =24

보시다시피, 우리 코드는 4에 자신보다 낮은 모든 숫자를 곱한 다음 자신을 곱합니다.

이 코드는 기능적입니다. 유일한 단점은 그것이 가능한만큼 우아하지 않다는 것입니다. 이때 재귀 함수가 유용합니다.

팩토리얼:재귀 예제

계승을 계산하는 재귀 함수를 작성해 봅시다. 새 Python 파일을 열고 다음 코드를 붙여넣습니다.

def factorial(number):
	if number == 1:
		return 1
	else:
		return (number * factorial(number - 1))

이 코드는 재귀적 접근 방식을 사용합니다. 이 함수가 실행되면 "if" 문이 실행됩니다. 이 명령문은 함수에 전달된 숫자가 1과 같은지 확인합니다. 같으면 1을 반환합니다. 그렇지 않으면 숫자의 계승을 계산합니다.

이 계산은 함수에 전달된 숫자에 이전 숫자의 계승을 곱하여 작동합니다. 이 함수는 "숫자"가 1이 될 때까지 계속해서 호출됩니다. 함수가 호출될 때마다 "숫자"의 값은 1만큼 감소합니다.

숫자 4로 코드를 시도해 보겠습니다.

answer = factorial(4)
print(answer)

답변 24가 반환됩니다. 우리의 대답은 정확합니다. 그것은 우리의 마지막 예와 같습니다. 우리는 이 문제에 대한 해결책을 반복적이 아니라 재귀적으로 찾았습니다.

여전히 약간의 도움이 필요하십니까? 재귀의 또 다른 예를 살펴보겠습니다.

피보나치 수열을 사용한 재귀

피보나치 수열은 각 숫자가 이전 두 수의 합인 수학적 수열입니다. 이 시퀀스는 0, 1, 1, 2, 3, 5, 8, 13 등으로 시작합니다.

이 시퀀스는 두 개의 숫자를 더하여 다음 숫자를 찾습니다. 이것은 재귀에 이상적입니다.

Python 파일을 열고 다음 코드를 붙여넣습니다.

def fibonacci(number):
	if number <= 1:
		return number
	else:
		return(fibonacci(number - 1) + fibonacci(number - 2))

이 코드는 "숫자"가 1보다 크면 목록에서 앞의 두 숫자의 합을 계산합니다. 그렇지 않으면 "숫자가 반환됩니다". 이제 함수를 호출해 보겠습니다.

executions = 5

print("Fibonacci Sequence:")
for number in range(executions):
	print(fibonacci(number))

실행 변수는 계산하려는 피보나치 수열의 숫자를 추적합니다. 이것을 사용하여 fibonacci()를 호출하는 for 루프를 만듭니다. 1 범위의 각 숫자와 "실행" 값에 대한 함수입니다.

for 루프가 시작되기 전에 "Fibonacci Sequence:"를 콘솔에 출력합니다. 이 예에서 "for" 루프는 다음을 실행합니다.

fibonacci(1)
fibonacci(2)
fibonacci(3)
fibonacci(4)
fibonacci(5)

코드를 함께 실행하고 어떤 일이 일어나는지 봅시다:

Fibonacci Sequence:
0
1
1
2
3

우리 코드는 피보나치 수열의 처음 5개 숫자를 계산합니다. "실행" 값을 높이면 더 많은 숫자를 계산할 수 있습니다.

재귀 깊이 및 기본 조건

재귀 함수에는 기본 조건이 있어야 합니다. 이것은 특정 기본 케이스가 충족될 때 재귀를 중지하는 조건입니다. 기본 기능이 없으면 무한 루프가 생성됩니다.

재귀 함수는 기본적으로 1,000번 이상 실행할 수 없습니다. 이 한도에 도달하면 다음과 같은 오류가 나타납니다.

RecursionError: maximum recursion depth exceeded

다음은 피보나치 프로그램의 기본 조건입니다.

...
if number <= 1:
		return number
…

이 조건은 피보나치 프로그램 내부의 "숫자" 값이 1 이하인지 확인합니다. 그렇다면 "숫자" 값이 반환됩니다. 그렇지 않으면 재귀 함수가 시작됩니다.

재귀를 사용해야 하는 이유

반복 함수보다 재귀를 사용하면 어떤 이점이 있습니까? 기술적으로 두 방법 모두 동일한 결과를 얻을 수 있습니다. 재귀의 장점은 읽기가 더 쉽다는 것입니다.

재귀 함수를 보면 문제에 대한 답이 문제를 더 작은 부분으로 분해하는 데 있다는 것이 분명합니다. 반복 루프가 더 빠를 수 있지만 일반적으로 가독성 때문에 재귀 함수가 선호됩니다.

재귀 함수는 읽기 쉽기 때문에 유지 관리 및 디버그도 더 쉽습니다. 이것은 이해하기 어려울 수 있는 복잡한 알고리즘을 작성할 때 특히 유용합니다.

결론

재귀 함수는 문제에 대한 솔루션을 찾기 위해 자신을 호출하는 함수입니다.

재귀 함수는 문제를 여러 부분으로 나누고 반복당 문제의 한 부분을 해결합니다. 재귀 함수는 일반적으로 피보나치 수열에서 계승과 숫자를 계산하는 데 사용됩니다. 또한 여러 알고리즘에서 사용됩니다.

이제 Python에서 재귀 함수 작업을 시작할 준비가 되었습니다.