우리 모두가 알고 있듯이 재귀 는 그러한 문제 중 하나입니다. 머릿속을 감싸는 것은 프로그래밍 항해에서 "마일스톤"을 달성하는 것처럼 느껴집니다.
그러나 실제 문제에서 실제로 사용하는 경우 재귀의 메커니즘을 알면 충분하지 않습니다. 재귀가 가장 적합한 솔루션 인 문제의 본질도 이해해야합니다.
내 질문은 이것입니다 ...
- 재귀의 해결을 요구하는 "문제 패턴"은 무엇인가
- 재귀는 "분할 및 정복"전략의 형태 또는 "코드 재사용"의 형태이거나, 또는 그 자체의 디자인 패턴입니다.
- 재귀가 즉각적인 해결책으로 떠오르는 실제 문제의 예를 들어 주시겠습니까?
-업데이트-
많은 답이 "진정한 문제"를 나무 횡단, 계승 등으로 언급하고 있습니다. 저는 "진짜 실제 문제"를 선호합니다. 예를 들어 보겠습니다 ...
우리는 큰 텍스트 척 (링크 된 목록으로 약 30MB의 텍스트 structs
)을 가지고 있었고, 전체 텍스트 검색을 위해 인덱스를 만들어야했습니다. 전체 인덱스를 메모리에 유지하고 10 분마다 텍스트를 다시 인덱싱해야했습니다.
10 분마다 전체 텍스트 (2 개의 링크 된 목록, 한 줄씩)를 새로 생성 된 텍스트 덩어리와 비교하여 변경된 줄을 확인한 다음 해당 줄만 다시 색인을 생성합니다. 전체 텍스트를 다시 색인화하지 않아도됩니다. 두 개의 30MB 링크 된 목록 사이의 차이점을 찾아야했습니다.
내 동료 중 한 명이 HEAVY 재귀를 사용하여 선을 비교 한 다음 척이 배열에서 다른 위치를 수집하는 환상적인 프로그램을 생각해 냈습니다. 그렇습니다. 그게했다.
요점은-재귀를 많이 사용 하여이 문제를 현명하게 해결할 수 있음을 어떻게 알 수 있습니까?