Udtrykket rekursiv funktion i beregningsteori bruges til at henvise til tre klasser af funktioner:
Sidstnævnte falder sammen med klassen af Turing-beregnerbare funktioner . Definitionerne af disse tre klasser er stærkt relaterede. De blev introduceret af Kurt Gödel for at formalisere begrebet beregnelighed.
Sættet af delvist rekursive funktioner omfatter sættet af generelle rekursive funktioner, og de generelle rekursive funktioner inkluderer primitive rekursive funktioner. Delvist rekursive funktioner omtales undertiden blot som rekursive funktioner.
Definitionen af begrebet primitiv rekursiv funktion er induktiv . Den består i at specificere en klasse af grundlæggende primitive rekursive funktioner og to operatorer ( superposition og primitiv rekursion ), der tillader opbygning af nye primitive rekursive funktioner baseret på eksisterende.
De grundlæggende primitive rekursive funktioner omfatter følgende tre typer funktioner:
Substitutions- og primitive rekursionsoperatører er defineret som følger:
I denne definition kan en variabel forstås som en iterationstæller, — som en indledende funktion i begyndelsen af iterationsprocessen, der udsteder en bestemt rækkefølge af funktioner af variable, begyndende med , og — som en operator, der accepterer som inputvariabler , iterationstrinnummer , en funktion ved et givet iterationstrin og returnerende funktion i det næste trin i iterationen.
Sættet af primitive rekursive funktioner er det minimale sæt, der indeholder alle grundlæggende funktioner og lukket under de specificerede substitutions- og primitive rekursionsoperatorer.
Med hensyn til imperativ programmering svarer primitive rekursive funktioner til programblokke, der kun bruger aritmetiske operationer, samt en betinget operator og en aritmetisk sløjfeoperator (en sløjfeoperator, hvor antallet af iterationer er kendt på det tidspunkt, hvor sløjfen starter). Hvis programmøren begynder at bruge loop-operatoren while, hvor antallet af iterationer ikke er kendt på forhånd og i princippet kan være uendeligt, så går han over i klassen af delvist rekursive funktioner.
Lad os pege på en række velkendte aritmetiske funktioner , der er primitivt rekursive.
En delvist rekursiv funktion er defineret på samme måde som en primitiv rekursiv, kun for to operatorer, superposition og primitiv rekursion, tilføjes en tredje operator - argumentminimering.
Delvis rekursive funktioner for nogle argumentværdier er muligvis ikke defineret, da argumentminimeringsoperatoren ikke altid er korrekt defineret, da funktionen muligvis ikke er lig med nul for nogen argumentværdier. Fra synspunktet om imperativ programmering kan resultatet af en delvist rekursiv funktion ikke kun være et tal, men også en undtagelse eller en uendelig sløjfe svarende til en udefineret værdi.
En generel rekursiv funktion er en delvist rekursiv funktion defineret for alle argumentværdier. Problemet med at afgøre, om en delvist rekursiv funktion med en given beskrivelse er generel rekursiv eller ej, er algoritmisk uafgørligt .
Det er let at forstå, at enhver primitiv rekursiv funktion er delvist rekursiv, da operatorerne til at konstruere delvist rekursive funktioner per definition inkluderer operatorerne til konstruktion af primitive rekursive funktioner.
Det er også klart, at en primitiv rekursiv funktion er defineret overalt og derfor er en generel rekursiv funktion (en primitiv rekursiv funktion har ingen grund til at "hænge", da dens konstruktion bruger operatorer, der definerer funktioner defineret overalt).
Det er ret svært at bevise eksistensen og give et eksempel på en generel rekursiv funktion, der ikke er primitivt rekursiv. Et populært eksempel er Ackermann-funktionen . Et andet eksempel på en generel rekursiv funktion, der ikke er primitiv rekursiv, er konstrueret ved Cantors diagonale metode ud fra en universel funktion for et sæt unære primitive rekursive funktioner.
Som det blev vist af Gödel , falder delvist rekursive funktioner sammen med sættet af beregnelige funktioner .
Udtrykkene "partially recursive function" og "general recursive function" har slået rod af historiske årsager og er i det væsentlige resultatet af en unøjagtig oversættelse af de engelske termer partial recursive function og total recursive function , som er mere korrekt oversat som "rekursive funktioner defineret på dele af sættet af mulige argumenter ” og ”rekursive funktioner defineret på hele sættet af mulige argumenter”. Adverbiet "delvis" henviser ikke til adjektivet "rekursivt", men til funktionens omfang . Måske ville et mere korrekt navn være "delvist definerede rekursive funktioner" og blot "overalt definerede rekursive funktioner". Men lange navne slog ikke rod.