"유도 적으로"와 "재귀 적으로"는 매우 비슷한 의미입니까?
예를 들어, 결정된 첫 번째 k 개의 구성 요소를 기반으로 첫 번째 k + 1 구성 요소를 결정하여 n-dim 벡터를 결정하는 알고리즘이 있고 첫 번째 구성 요소로 초기화 된 경우 재귀 적으로 또는 유도 적으로 작동합니까? 나는 "재귀 적으로"를 사용하고 있지만, 오늘날 누군가는 "유도 적으로"말했다.
"유도 적으로"와 "재귀 적으로"는 매우 비슷한 의미입니까?
예를 들어, 결정된 첫 번째 k 개의 구성 요소를 기반으로 첫 번째 k + 1 구성 요소를 결정하여 n-dim 벡터를 결정하는 알고리즘이 있고 첫 번째 구성 요소로 초기화 된 경우 재귀 적으로 또는 유도 적으로 작동합니까? 나는 "재귀 적으로"를 사용하고 있지만, 오늘날 누군가는 "유도 적으로"말했다.
답변:
아니요 , 그러나 다른 사람들이 제공 한 이유가 아닙니다. 재귀와 유도의 차이점은 재귀가 "하향식"이고 유도가 "하향식"이라는 것이 아닙니다. 유도는 "primitve 재귀"라고 불리는 것에 동형 적이지만 일반적으로 재귀는 유도보다 훨씬 강력 합니다.
하향식과 상향식의 구별은 사소한 것입니다. "하향식"기본 재귀 프로그램은 기계적으로 "하단"으로 변환 될 수 있습니다. 실제로, 유도에 의한 모든 증거는 재귀 프로그램으로 바뀔 수 있습니다. 귀납적 구성의 미적분학의 틀에서, 모든 자연수가 어리 석다는 것을 증명하고자한다면, n- 1은 어리 석다.
귀납의 핵심 요소는 사물이 더 작은 것의 측면에서 정의되고 아주 많은 단계 후에 "하단"이라는 것입니다. 자연수는 모든 자연수가 0이거나 더 작은 자연계의 계승이므로 귀납적입니다. 모든 목록이 비어 있거나 목록과 작은 목록으로 나눌 수 있기 때문에 목록은 귀납적입니다.
때로는 재귀 적 프로그램은 작은 것의 관점에서 작성되지 않습니다. 예를 들어 다음 Collatz 기능을 사용하십시오.
fun collatz(n)
if n <= 1
return 0;
else if n % 2 == 0
return 1 + collatz(n / 2)
else
return 1 + collatz(3 * n + 1)
end
이 기능은 하향식이나 상향식이 아니며 자연수를 유도하지 않습니다.
귀납적으로 취급하라는 명령이있을 수 있지만 대부분의 경우 단순히 방법이 없습니다. 무한 스트림을 통한 함수가 좋은 예입니다. 실제로, 스트림은 "유도 성 (coinductive)"유형의 프로토 타입 예이다.
온라인에서 무료로 제공되는 Bob Harper의 "프로그래밍 언어의 기초"는 귀납적, 공동성 및 재귀 유형에 대한 좋은 소개를 제공합니다.
나에게 그것은 대부분 관점의 문제입니다. 더 작은 것을 기준으로 객체를 정의하면 유도 적으로 수행하므로 상향식입니다. 같은 방식으로 해결되는 더 작은 조각으로 문제를 해결하면 재귀라고합니다.
(편집) PS. Mathematics 자매 부서 인 Recursive vs. inductive definition 에서 유사한 질문을 참조하십시오 . Carl Mummert의 답변에서 인용합니다.
가장 좋은 설명은 "무의미한"개체 집합을 정의 할 때 "유도 정의"가 더 일반적이고 이미 존재하는 개체 컬렉션에서 함수를 정의 할 때 "재귀 정의"가 더 일반적이라는 것입니다.
그러나 더 중요한 것은 :
그것은 잠을 잃을 가치가 없다
아니요, 동일하지 않습니다. 그리고 당신 말이 맞습니다 (나는 당신이 묘사하는 알고리즘에 대해 가정하고 있습니다) : 그것은 재귀 적입니다.
그 이유는 사전이나 위키 백과에서 읽을 수있는 두 단어의 정의 때문입니다.
귀납법 ( '수학적 귀납법'이라고 가정)은 특히 모든 주장이 사실임을 증명하는 것입니다.
재귀는 구체적으로 프로세스가 동일한 프로세스 내에서 어떤 방식으로 반복되는지에 관한 것입니다.
RE : 다른 사람들의 답변 :
다른 사람들의 대답을 본 후, 나는 왜 혼란이 있는지 이해할 수 있습니다. 데이터 구조, 함수 및 언어를 정의 할 때 일부 이론가들은 혼란스런 방식으로 '유도 적'과 '재귀 적'을 사용하는 것처럼 보입니다 (이 질문에 대한 주석 참조). Koppel의 답변 (현재 최고 투표율을 보더라도)이 실제로 그 혼란을 반영한다고 생각하지 않습니다. 우리가 알고리즘에 대해 이야기하고 있기 때문에 '유도 알고리즘'이 없다고 말할 수는 없습니다. 나는 그것이 불필요한 분류라고 생각합니다.