기금넷 공식사이트 - 금 선물 - 재귀 마스터 방법
재귀 마스터 방법
첫째, 재귀 알고리즘
재귀 알고리즘 (영어: Recursion algorithm) 은 문제를 유사한 하위 문제로 반복적으로 분해하여 문제를 해결하는 방법을 말합니다. 재귀 방법은 많은 컴퓨터 과학 문제를 해결하는 데 사용될 수 있으므로 컴퓨터 과학에서 매우 중요한 개념이다. 대부분의 프로그래밍 언어는 함수의 자체 호출을 지원합니다. 여기서 함수는 자체적으로 재귀적으로 호출할 수 있습니다. 계산 이론은 재귀가 루프를 완전히 대체할 수 있다는 것을 증명할 수 있기 때문에 많은 함수형 프로그래밍 언어 (예: 체계) 는 재귀로 루프를 실현한다.
둘째, 재귀 프로그램
자체 조정을 지원하는 프로그래밍 언어에서 재귀는 간단한 함수 호출을 통해 수행할 수 있습니다. 예를 들어 계승을 계산하는 절차는 수학적으로 다음과 같이 정의할 수 있습니다.
이 프로그램은 Scheme 언어로 작성할 수 있습니다.
1
(define (계승 n) (if (= n 0) 1 (* n (계승 (-n 1)))
점 조합
하나의 프로그래밍 언어가 자체 호출을 지원하지 않더라도 함수가 해당 언어의 첫 번째 클래스인 경우 (즉, 런타임 시 생성되어 변수로 간주될 수 있음) 반복은 점 조합자 (영어) 에 의해 생성될 수 있습니다. 다음 체계는 자체 호출을 사용하지 않고 Z 연산자 (영어: Z combinator) 라는 점 병합기를 사용하므로 재귀적인 목적을 달성할 수 있습니다.
1
(z 정의 (람bda (f) ((람bda (recurve) (f (람bda arg (apply (recurve recurve) arg))) () = n 0) 1 (* n (f (- n 1)))))
이 프로그램의 아이디어는 함수가 여기서 자신을 호출할 수 없기 때문에 함수 응용 프로그램과 Z 를 결합한 함수를 사용하여 계산할 매개변수를 적용할 수 있다는 것입니다.
꼬리 재귀
꼬리 재귀란 재귀 함수가 자신을 호출한 후 직접 값을 반환하므로 연산을 추가할 필요가 없다는 것을 의미합니다. 꼬리 재귀는 순환과 동일하며 Scheme 과 같은 일부 언어에서는 순환 명령으로 최적화할 수 있습니다. 따라서 이러한 언어에서 꼬리 재귀는 호출 스택 공간을 차지하지 않습니다. 다음 스키마 프로그램도 숫자의 계승을 계산하지만 꼬리 재귀를 사용합니다.
1
(define (계승 n) (define (iter 제품 카운터) (if(& gt;; Counter n) 곱 (ITER (* counterproduct) (+counter1)) (ITER1/kloc
셋째, 해결할 수 있는 문제
데이터는 재귀적으로 정의됩니다. 피보나치 함수 같은 것들이죠.
재귀 알고리즘을 통해 문제 해결을 실현하였다. 예를 들어 하노이 문제.
데이터의 구조는 재귀적으로 정의됩니다. 이진 트리, 광의표 등.
넷째, 재귀 데이터
데이터 유형은 재귀적으로 정의할 수 있습니다. 예를 들어 간단한 재귀는 자연수의 정의로 정의됩니다. "한 자연수는 0 또는 다른 자연수에 1" 을 더한 것입니다. Haskell 은 연결된 목록을 다음과 같이 정의할 수 있습니다.
1
Data list of strings = empty list | cons string list of strings
이 정의는 "연결된 테이블 또는 빈 문자열 열 또는 연결된 테이블 앞에 문자열이 있음" 을 선언하는 것과 같습니다. 이 재귀 정의는 모든 연결된 목록에 도달할 수 있음을 알 수 있습니다.