프로그래밍 경험이 있는 사람은 재귀 함수에 익숙해야 합니다. 우리는 일련의 복잡한 문제를 해결하기 위해 종종 재귀를 사용합니다. 재귀 알고리즘은 대부분의 문제에 매우 효과적이며 코드를 최적화할 수도 있습니다. 재귀를 사용할 때:
1) 재귀는 함수 자체 내에서 함수 자체를 호출합니다.
2) 재귀의 효율성은 상대적으로 낮으며, 시간 제한이 있는 경우에는 사용하지 않는 것이 좋습니다.
3) 재귀 과정에는 명확한 종료 조건, 즉 재귀 종료가 필요합니다.
아래에서 재귀함수에 대해 자세히 설명하겠습니다.
먼저 예를 통해 재귀의 간단한 사용법을 살펴보겠습니다.
m=int(input('숫자 입력:'))deftest(x):x+=2ifx<100:test(x)else:print('마지막 x는:',x)test(m)
출력은 다음과 같습니다
숫자를 입력하세요: 20, 마지막 x는: 100
이 예제를 분석해 보겠습니다. 먼저 코드의 첫 번째 줄에 정수를 입력합니다. 마지막 줄에서는 test() 메서드에 실제 매개 변수로 전달됩니다. 2 먼저 판단한 다음 x 값이 100보다 작으면 이 함수를 다시 호출합니다. 호출 시 x의 현재 값이 호출에 참여하는 실제 매개변수로 사용됩니다. x> =100이 만족됩니다.
아래 다이어그램을 살펴보십시오.
즉, 조건이 맞지 않으면 가장 바깥층으로 돌아가서 이 함수를 호출하는 것이다.
재귀 알고리즘의 고전적인 문제에 대해 이야기할 때 피보나치 수열 과 하노이 탑은 항상 분리될 수 없습니다. 여기서는 재귀를 사용하여 피보나치 수열을 해결하는 방법을 설명합니다.
먼저, 피보나치 수열의 재귀 공식은 F(n)=F(n-1)+F(n-2), F(1), F(2)는 1이라는 것을 알아야 합니다. 재귀를 사용하여 피보나치 수열에서 항목의 값을 찾을 수 있습니다.
피보나치 수열 문제를 해결하는 데 사용할 수 있는 방법에는 여러 가지가 있습니다.
먼저 이 문제를 해결하기 위해 일반적으로 사용되는 재귀 방법을 사용합니다.
N=int(input(얻을 아이템 갯수 입력:))deffibonacci(n):ifn<=2:#2보다 작거나 같으면 n을 1로 설정 return1else:returnfibonacci(n-1) +fibonacci(n-2)print ('해당 값은',fibonacci(n))
출력은 다음과 같습니다
얻으려는 항목 수를 입력하세요. 4는 3에 해당합니다.
이 재귀 호출 방법의 경우 값 4를 입력하면 다음 작업이 재귀적으로 수행됩니다.
피보나치(3)+피보나치(2)=피보나치(2)+피보나치(1)+피보나치(2)
그러면 네 번째 항의 값은 1+1+1=3임을 알 수 있습니다.
실제로 이 해결 방법은 너무 많은 반복이 필요하기 때문에 시간 낭비입니다. 이 문제를 해결하기 위해 시간 대신 공간을 사용할 수도 있습니다.
코드는 다음과 같습니다:
n=int(input(얻을 항의 수를 입력하세요:))fibonacci=[1,1]foriinrange(2,n):fibonacci.append(fibonacci[i-1]+fibonacci[i-2])print (' 해당 값은 ',fibonacci[n-1])
출력은 다음과 같습니다
얻으려는 항목 수를 입력하세요. 4는 3에 해당합니다.
이런 식으로 먼저 목록의 처음 두 항목의 값을 지정한 다음, 풀고 싶은 항목 수 n에 대해 수식을 통해 피보나치 수열 목록을 필요한 항목에 직접 채우고, 마지막으로 인덱스에 따라 값은 해당 출력 결과를 직접 찾습니다.
위에서 언급한 대로 재귀 함수에 대한 내용은 끝났습니다. 재귀 종료와 시간 제한에 특별한 주의를 기울여야 합니다. 많은 경우 재귀 메서드를 사용하면 프로그램 이 종료됩니다. 지정된 시간을 초과하면 문제를 해결하기 위해 생각을 바꿔야 합니다. 위에서 언급한 두 번째 방법은 모든 사람이 문제를 해결하는 데 도움이 될 수 있습니다.