Rekurzív függvény (számítási elmélet)

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2021. június 4-én felülvizsgált verziótól ; az ellenőrzések 2 szerkesztést igényelnek .

A rekurzív függvény kifejezést a kiszámíthatósági elméletben a függvények három osztályára használják:

Ez utóbbiak egybeesnek a Turing-számítható függvények osztályával . Ennek a három osztálynak a meghatározása szorosan összefügg. Kurt Gödel vezette be őket , hogy formalizálja a kiszámíthatóság fogalmát.

A részben rekurzív függvények halmaza tartalmazza az általános rekurzív függvények halmazát, az általános rekurzív függvények pedig primitív rekurzív függvényeket. A részben rekurzív függvényeket néha egyszerűen rekurzív függvényeknek nevezik.

Primitív rekurzív függvény

Definíció

A primitív rekurzív függvény fogalmának meghatározása induktív . Ez az alapvető primitív rekurzív függvények osztályának meghatározásából és két operátorból áll ( szuperpozíció és primitív rekurzió ), amelyek lehetővé teszik új primitív rekurzív függvények létrehozását a meglévők alapján.

Az alapvető primitív rekurzív függvények a következő három típusú függvényt tartalmazzák:

A helyettesítő és primitív rekurziós operátorok meghatározása a következő:

Ebben a definícióban a változó felfogható iterációs számlálóként, — mint kezdeti függvény az iterációs folyamat elején, amely változók bizonyos függvénysorozatát bocsátja ki, kezdve -val , és — mint operátor, amely bemeneti változóként fogadja el , iterációs lépésszám , egy függvény egy adott iterációs lépésben, és visszatérő függvény az iteráció következő lépésében.

A primitív rekurzív függvények halmaza az összes alapfüggvényt tartalmazó minimális halmaz, amely a megadott helyettesítési és primitív rekurziós operátorok alatt zárva van.

Az imperatív programozás szempontjából a primitív rekurzív függvények olyan programblokknak felelnek meg, amelyek csak aritmetikai műveleteket használnak, valamint egy feltételes operátort és egy aritmetikai hurok operátort (olyan hurokoperátort , amelyben az iterációk száma ismert a ciklus indulásakor). Ha a programozó a ciklusoperátort kezdi használni while, amelyben az iterációk száma előre nem ismert, és elvileg végtelen is lehet, akkor átmegy a részlegesen rekurzív függvények osztályába.

Példák

Mutassunk meg néhány jól ismert aritmetikai függvényt , amelyek primitíven rekurzívak.

; ; . ; ; . ; ; ; ; ;

Részlegesen rekurzív függvény

A részlegesen rekurzív függvény a primitív rekurzív függvényhez hasonlóan van definiálva, csak két operátorra, szuperpozícióra és primitív rekurzióra, hozzáadódik egy harmadik operátor - argumentumminimalizálás.

, azzal a feltétellel Ez azt jelenti, hogy a függvény a függvény utolsó argumentumának minimális értékét adja vissza , amelynél az értéke 0.

Előfordulhat, hogy egyes argumentumértékek részlegesen rekurzív függvényei nem definiálhatók, mivel az argumentumminimalizálási operátor nincs mindig megfelelően definiálva, mivel előfordulhat, hogy a függvény egyetlen argumentumérték esetében sem egyenlő nullával. Az imperatív programozás szempontjából egy részlegesen rekurzív függvény eredménye nem csak egy szám lehet, hanem kivétel vagy egy meghatározatlan értéknek megfelelő végtelen ciklus is.

Általános rekurzív függvény

Az általános rekurzív függvény egy részlegesen rekurzív függvény, amely minden argumentumértékhez definiálható. Algoritmikusan eldönthetetlen , hogy egy adott leírású részben rekurzív függvény általános rekurzív - e vagy sem .

Tulajdonságok

Könnyű megérteni, hogy bármely primitív rekurzív függvény részben rekurzív, mivel a definíció szerint a részlegesen rekurzív függvények létrehozására szolgáló operátorok magukban foglalják a primitív rekurzív függvényeket létrehozó operátorokat.

Az is világos, hogy egy primitív rekurzív függvény mindenhol definiálva van, ezért általános rekurzív függvény (a primitív rekurzív függvénynek nincs oka „lefagyni”, mivel a felépítése mindenhol definiált függvényeket definiáló operátorokat használ).

Meglehetősen nehéz bizonyítani egy általános rekurzív függvény létezését és példát adni, amely nem primitíven rekurzív. Az egyik népszerű példa az Ackermann függvény . Egy másik példa az általános rekurzív függvényre, amely nem primitív rekurzív, a Cantor-féle diagonális módszerrel szerkesztett univerzális függvényből univerzális primitív rekurzív függvények halmazára.

Amint Gödel kimutatta , a részben rekurzív függvények egybeesnek a kiszámítható függvények halmazával .

Névelőzmények

A „részlegesen rekurzív függvény” és „általános rekurzív függvény” kifejezések történelmi okokból gyökereznek, és alapvetően az angol részleges rekurzív függvény és teljes rekurzív függvény kifejezések pontatlan fordításának az eredménye , amelyeket helyesebben „rekurzív függvényekként definiáltnak” fordítanak. a lehetséges argumentumok halmazának egyes részein ” és „a lehetséges argumentumok teljes halmazán definiált rekurzív függvények”. A "részben" határozószó nem a "rekurzív" melléknévre utal, hanem a funkció terjedelmére. Talán helyesebb elnevezés a "részben meghatározott rekurzív függvények" és egyszerűen a "mindenhol definiált rekurzív függvények". De a hosszú nevek nem vertek gyökeret.

Lásd még

Irodalom