계산 이론에서 계산 가능한 함수는 재귀 함수라고도합니다. 적어도 첫눈에 그들은 일상 프로그래밍에서 "재귀 적"이라고 부르는 것과 공통점이 없습니다 (즉, 스스로 호출하는 함수).
계산의 맥락에서 재귀의 실제 의미는 무엇입니까? 왜 이러한 기능을 "재귀"라고합니까?
다른 말로 표현하자면 : "재 귀성"의 두 의미 사이에는 어떤 관련이 있습니까?
계산 이론에서 계산 가능한 함수는 재귀 함수라고도합니다. 적어도 첫눈에 그들은 일상 프로그래밍에서 "재귀 적"이라고 부르는 것과 공통점이 없습니다 (즉, 스스로 호출하는 함수).
계산의 맥락에서 재귀의 실제 의미는 무엇입니까? 왜 이러한 기능을 "재귀"라고합니까?
다른 말로 표현하자면 : "재 귀성"의 두 의미 사이에는 어떤 관련이 있습니까?
답변:
몇 가지 기본 기능을 정의하십시오.
제로 기능
후속 기능
프로젝션 기능
이제부터는 을 사용하여 (x1,x2,…,xn)
구성을 정의하십시오.
주어진 기능
다음 함수를 구성하십시오.
원시 재귀를 정의하십시오.
주어진 기능
다음과 같은 기능을 구성하십시오.
이용 될 수있는 모든 기능 조성물 및 프리미티브 재귀 의 기본적인 기능은 ,라고 프리미티브 재귀 . 그것은 정의에 의해 그런 식으로 불립니다. 스스로 호출하는 함수와의 링크가 존재하지만 서로 연결하려고 시도 할 필요는 없습니다. 재귀를 동음이라고 생각할 수 있습니다.
위의 정의와 구성은 계산 가능한 모든 기능, 즉 해당 기능에 대한 튜링 머신이 존재하는 모든 기능을 포착하기 위해 고델 (Gödel)에 의해 구성되었습니다. 튜링 머신의 개념은 아직 설명되지 않았거나 최소한 모호한 점에 유의하십시오.
불행히도 Ackermann이라는 사람이 와서 다음 기능을 정의했습니다.
이 함수는 계산 가능하지만 위의 구성 만 사용하여 구성 할 수는 없습니다! (즉, 는 원시 재귀가 아닙니다) 이것은 Gödel과 그의 소유가 구성에서 계산 가능한 모든 기능을 캡처하지 못했음을 의미합니다!
Gödel은 구성 할 수 있도록 자신의 기능 클래스를 확장해야했습니다 . 그는 다음을 정의하여이를 수행했습니다.
무한한 최소화
이 마지막 것은 이해하기 어려울 수 있지만 기본적으로 는 의 가장 작은 루트 (루트가 존재하는 경우)를 의미합니다.
위에 정의 된 모든 구성으로 구성 할 수있는 모든 기능을 재귀 라고 합니다. 다시 말하지만, 재귀 라는 이름 은 정의에 의한 것일 뿐이며 반드시 자신을 호출하는 함수와 상관 관계가있는 것은 아닙니다. 진실로, 그것을 동음이라고 생각하십시오.
재귀 함수는 부분 재귀 함수 이거나 전체 재귀 함수일 수 있습니다. 모든 부분 재귀 함수는 전체 재귀 함수입니다. 모든 원시 재귀 함수는 총계입니다. 전체가 아닌 부분 재귀 함수의 예로 후속 함수의 최소화를 고려하십시오. 후속 함수에는 근이 없으므로 최소화는 정의되지 않습니다. 전체 재귀 함수의 예 (최소화 사용)는 입니다.
이제 Gödel은 확장 된 함수 클래스를 사용 하여 함수 를 구성 할 수있었습니다 . 사실, Turing machine으로 계산할 수있는 모든 기능은 위의 구성을 사용하여 표현할 수 있으며 그 반대의 경우도 마찬가지입니다. 모든 구성은 Turing machine으로 표현할 수 있습니다.
흥미가 있다면 Gödel의 수업을 더 크게 만들 수 있습니다. 무한한 최소화의 '반대'를 정의 할 수 있습니다. 즉, 무한한 최대화, 즉 가장 큰 근을 찾는 함수입니다. 그러나 해당 기능을 계산하는 것이 어렵다는 것을 알 수 있습니다. 당신은에 읽을 수 있습니다 바쁜 비버 문제 , 시도 무제한의 극대화를 적용 할 수 있습니다.
계산 이론의 창시자들은 수학자였다. 그들은 컴퓨터가 있기 전에 지금 계산 이론이라고하는 것을 설립했습니다. 수학자들이 계산할 수있는 함수를 정의한 방법은 무엇입니까? 재귀 정의로!
따라서 튜링 머신이나 람다 미적분학 또는 레지스터 머신과 같은 다른 계산 모델이 있기 전에 재귀 함수가있었습니다. 따라서 사람들은이 함수를 재귀 함수라고합니다. 그들이 튜링 머신과 다른 모델이 계산할 수있는 정확한 것으로 판명되었다는 사실은 차후의 사건입니다 (주로 Kleene에 의해 입증 됨).
재귀 이론에 사용되는 필드의 이름입니다. 그러나 최근 수십 년 동안 이름을 재귀 이론에서 컴퓨터 과학 (vs. mathy)으로 더 호소력있는 것으로 바꾸려는 성공적인 추진이있었습니다. 결과적으로이 필드는 이제 계산 성 이론이라고합니다. 그러나 초기 수십 년 동안 책, 논문, 회의 등을 보면 재귀 이론이라고하며 계산 이론은 아닙니다. Soare의 1987 년 저서 (계산 이론으로 이름을 바꾸려는 주도적 인 인물)의 제목조차도 "재귀 적으로 열거 가능한 집합 및 학위"입니다.
역사에 대해 더 알고 싶다면 재미 있고 좋은 곳을 읽으십시오 .Odifreddi의 고전 재귀 이론의 첫 번째 장입니다.
긴 의견을 제시하는 대신 답변을 추가하기로 결정했습니다.
그것들은 재귀 적 으로 정의 되기 때문에 " 더 복잡한 함수는 이전에 정의 된 더 간단한 함수의 관점에서 정의됩니다 "
이러한 종류의 반복 또는 증분 절차는 잘 정의 된 함수를 생성 합니다 (수학적 의미에서).
이것이 수학적 관점에서 재귀 의 의미입니다 . 프로그래밍 언어에서의 재귀와 관련이있는 방법을 아래에서 참조하십시오.
이 과정을 수학 의 재귀의 예인 (수학적) 유도 와 같은 기술 및 방법과 비교하십시오 .
프로그래밍에는 공학적인 것뿐만 아니라 수학적 정맥도 있습니다.
이 (보통 건설적인) 절차는 운영 체제 용어에서 " 부트 스트래핑 " 이라고도 합니다.
그러나 동일한 함수 의 런타임 재귀 는 (즉 , 런타임 중에 자체 계산) 이미 계산 된 값 (또는 인수) 또는 다른 말로하면 이미 계산 된 결과 집합 에서 발생해야하기 때문에 (hmm)해야합니다 . 또한 위의 의미에서 재귀 적입니다. 즉, " 정의 된 wrt 이전에 정의 된 함수 (및 해당 값) "
그렇지 않으면 잘 정의되어 있지 않으며 Stack Overflow :)))))
운영 체제의 추가 예를 제공하기 위해 런타임 재귀 (호출 자체)는 특정 업데이트 (예 : 코어 업데이트) 후 운영 체제 재부팅 의 아날로그로 간주 할 수 있습니다 . 많은 OS가 다음 절차를 수행합니다.
Auberon의 아름다운 답변은 이러한 종류의 절차를보다 자세히 보여줍니다.