Termiä rekursiivinen funktio laskettavuusteoriassa käytetään viittaamaan kolmeen funktioluokkaan:
Jälkimmäiset ovat yhtäpitäviä Turingin laskettavien funktioiden luokan kanssa . Näiden kolmen luokan määritelmät liittyvät vahvasti toisiinsa. Kurt Gödel esitteli ne formalisoidakseen laskettavuuden käsitteen.
Osittain rekursiivisten funktioiden joukko sisältää joukon yleisiä rekursiivisia funktioita ja yleiset rekursiiviset funktiot sisältävät primitiiviset rekursiiviset funktiot. Osittain rekursiivisia funktioita kutsutaan joskus yksinkertaisesti rekursiivisiksi funktioiksi.
Primitiivisen rekursiivisen funktion käsitteen määritelmä on induktiivinen . Se koostuu perusprimitiivisten rekursiivisten funktioiden luokan määrittämisestä ja kahdesta operaattorista ( superpositio ja primitiivinen rekursio ), jotka mahdollistavat uusien primitiivisten rekursiivisten funktioiden rakentamisen olemassa olevien funktioiden pohjalta.
Perusprimitiiviset rekursiiviset funktiot sisältävät seuraavat kolme funktiotyyppiä:
Substituutio- ja primitiivirekursiooperaattorit määritellään seuraavasti:
Tässä määritelmässä muuttuja voidaan ymmärtää iteraatiolaskurina, — iterointiprosessin alussa olevana alkufunktiona, joka antaa tietyn muuttujien funktiosarjan, joka alkaa kirjaimella , ja — operaattorina, joka hyväksyy syöttömuuttujiksi , iteraatiovaiheen numero , funktio tietyssä iteraatiovaiheessa ja palauttava funktio iteroinnin seuraavassa vaiheessa.
Primitiivisten rekursiivisten funktioiden joukko on vähimmäisjoukko, joka sisältää kaikki perusfunktiot ja on suljettu määritettyjen korvaus- ja primitiivisten rekursiooperaattoreiden alle.
Pakollisen ohjelmoinnin kannalta primitiiviset rekursiiviset funktiot vastaavat ohjelmalohkoja, jotka käyttävät vain aritmeettisia operaatioita, sekä ehdollista operaattoria ja aritmeettisen silmukan operaattoria (silmukkaoperaattori , jossa iteraatioiden lukumäärä tunnetaan silmukan alkaessa). Jos ohjelmoija alkaa käyttää silmukkaoperaattoria while, jossa iteraatioiden lukumäärää ei tiedetä etukäteen ja joka voi periaatteessa olla ääretön, hän siirtyy osittain rekursiivisten funktioiden luokkaan.
Otetaan esille joukko hyvin tunnettuja aritmeettisia funktioita , jotka ovat primitiivisesti rekursiivisia.
Osittain rekursiivinen funktio määritellään samalla tavalla kuin primitiivinen rekursiivinen funktio, vain kahdelle operaattorille, superpositiolle ja primitiiviselle rekursiolle, lisätään kolmas operaattori - argumentin minimointi.
Joillekin argumenttiarvoille osittain rekursiivisia toimintoja ei ehkä ole määritetty, koska argumentin minimointioperaattoria ei aina ole määritetty oikein, koska funktio ei välttämättä ole yhtä suuri kuin nolla millekään argumenttiarvolle. Pakollisen ohjelmoinnin näkökulmasta osittain rekursiivisen funktion tulos voi olla paitsi luku, myös poikkeus tai määrittelemätöntä arvoa vastaava ääretön silmukka.
Yleinen rekursiivinen funktio on osittain rekursiivinen funktio, joka on määritelty kaikille argumenttiarvoille. Ongelma sen määrittämisessä, onko osittain rekursiivinen funktio tietyllä kuvauksella yleinen rekursiivinen vai ei, on algoritmisesti ratkaisematon .
On helppo ymmärtää, että kaikki primitiiviset rekursiiviset funktiot ovat osittain rekursiivisia, koska määritelmän mukaan osittain rekursiivisten funktioiden konstruointioperaattoreita ovat operaattorit primitiivisten rekursiivisten funktioiden muodostamiseksi.
On myös selvää, että primitiivinen rekursiivinen funktio on määritelty kaikkialla ja siksi se on yleinen rekursiivinen funktio (primitiivisellä rekursiivisella funktiolla ei ole mitään syytä "jumiutua", koska sen rakentamisessa käytetään operaattoreita, jotka määrittelevät kaikkialla määritellyt funktiot).
On melko vaikeaa todistaa olemassaolo ja antaa esimerkki yleisestä rekursiivisesta funktiosta, joka ei ole primitiivisesti rekursiivinen. Yksi suosittu esimerkki on Ackermann-funktio . Toinen esimerkki yleisestä rekursiivisesta funktiosta, joka ei ole primitiivinen rekursiivinen, on konstruoitu Cantorin diagonaalimenetelmällä universaalista funktiosta joukolle unaarisia primitiivisiä rekursiivisia funktioita.
Kuten Gödel osoitti , osittain rekursiiviset funktiot ovat yhtäpitäviä laskettavien funktioiden joukon kanssa .
Termit "osittain rekursiivinen funktio" ja "yleinen rekursiivinen funktio" ovat juurtuneet historiallisista syistä ja ovat pääosin seurausta englanninkielisten termien partial recursive function ja total recursive function epätarkoista käännöksistä , jotka on oikeammin käännetty "määritetyiksi rekursiivisiksi funktioiksi". mahdollisten argumenttien joukon osissa ” ja ”koko mahdolliselle argumenttijoukolle määriteltyjä rekursiivisia funktioita”. Adverbi "osittain" ei viittaa adjektiiviin "rekursiivinen", vaan funktion laajuuteen . Ehkä oikeampi nimi olisi "osittain määritellyt rekursiiviset funktiot" ja yksinkertaisesti "kaikkialla määritellyt rekursiiviset funktiot". Mutta pitkät nimet eivät juurtuneet.