파이썬 재귀를 사용하는 방법
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에서 재귀 함수 작업을 시작할 준비가 되었습니다.