Rekurzív függvények - studopediya
A rekurzió - az egyik alapvető programozási technikák. Rekurzív függvények - funkciók függenek magukat. Mikor megnéztük gép, akkor beszéltünk az átmeneti függvények, amelyek a későbbi időben automatát idő függ az értékük az előző alkalommal. Így végre automata memóriát. Elméletileg rekurzív függvények, amelyek történelmileg tekinthető első formalizációs fogalmak algoritmust alkalmazza számozási szavakat tetszőleges ábécé természetes számok (N), és bármely algoritmus csökkenti a kiszámítása során a függvény egész értékek az érvek [22].
Funkció kiszámítható, ha van olyan algoritmus, azaz lépésről lépésre „az egyszerűtől a bonyolult”, amely a bemeneti változókat számítja ki a függvény értékét, ha a bemeneti halmaz tartozik a domain a funkció, és megjelenít egy üzenetet, hogy a bemeneti halmaz nem tartozik a domain meghatározás funkciót.
Semicomputable funkciót, ha a bemeneti munkahely készlet nem tartozik a domain a funkció, az algoritmus nem fejezi be a munkát ( „hurok”). Computability kidolgozott elmélet A. Church. Az ötlet az volt, hasonlóan a tanulmány a probléma a funkcionális teljesség kapcsolási funkciók: válassza elemi kiszámítható függvényt (amelyek „ösztönösen kiszámítható”) - ez az alapja, és felajánl egy eszköz kapok ki ezeket az elemi kiszámítható függvényt bonyolultabb funkciókat véges számú lépésben (a szuperpozíció elve kapcsolási elmélet funkciók). Az így-kapott függvény is kiértékelhető.
Azok elemi kiszámítható függvények:
1) S (x) = x + 1, (N N), a következő függvény (következő természetes szám);
2) 0 (x) = 0, egy állandó nulla;
3) Im (x1 x2 ... xn) = xm - kiálló funkciót, ami a kiválasztás a m-edik n érveket.
Bizonyos funkciók a többi funkció semicomputable úgynevezett szereplők javasoltak véges számú lépésben.
Az első az, hogy tudjuk, hogy a készítmény operátor használatával, vagyis funktsiyufunktsy helyettesítés helyett a változókat. Ez növeli a méretét a funkciót.
A második üzemeltető az üzemeltető primitív rekurzió.
Tekintsük a példát beállítás numerikus sor Fibonacci 1,1,2,3,5,8,13,21 ... használva primitív rekurzió üzemeltetője:
Ez meghatározza a két kiindulási értékeit az f (0), F (1) és az elv a képződését a következő értékek. Ezzel szemben a funkciója az automata átmenetek, jelezte, nincs idő automaták és számítástechnikai n lépés, azaz, a függvény értékét néhány lépésben különbözik nulla, egyenlő értékének összege az előző két lépést.
Vegyünk egy másik példát a primitív rekurzió üzemeltetője:
f (0) = 1, f (1) = f (0) × 1 = 1, f (2) = f (1) × 2 = 2, F (3) = f (2) × 3 = 6, ...
Így arra kértük a faktoriális függvény: x!
Funkciók nyert elemi szuperpozíciójával véges számú alkalmazások és üzemeltetők primitív rekurzió úgynevezett primitív rekurzív. Úgy véljük, bonyolultabb rekurzió, például szor több változót egyszerre [19].
Tedd az összes funkció primitív - rekurzív? Belátható, hogy a készlet minden funkciót, mint egyetlen egész N N, ahol N - a természetes számok halmaza, megszámlálhatatlan, annál ez igaz a típus N N N a függvény minden egyes primitív rekurzív függvény véges leírás, azaz, meghatározza véges szó egy fix ábécé [19] az összes funkció. A készlet minden véges szó megszámlálható, azonban primitív rekurzív függvények nem több, mint megszámlálható megszámlálhatatlan részhalmazában funkciók típusú N N N. Továbbá, kiderül nem minden kiszámítható függvényt lehet leírni, mint primitív rekurzív.
A harmadik szolgáltató egy olyan üzemben minimalizálása m. amely lehetővé teszi, hogy bekerüljenek a számítások meghatározása válogatás a kívánt értéket.
Emlékezzünk vissza, hogy x1. x2 pozitív egészek. Az ilyen függvények parciális rekurzív, azaz, hogy nem teljesen meghatározott, ellentétben a teljesen bizonyos primitív rekurzív. Összhangban az értekezés az egyházi semicomputable funkció akkor és csak akkor, ha a részleges rekurzív.
Nincs kiszámítható függvényt, ahol a kapcsolat a bemeneti és kimeneti értékek annyira komplex [36], hogy nem lehet beállítani szigorúan specifikus lépésenkénti átalakításának folyamata a nyers adatokat az eredmény, azaz a lehetetlen építeni egy algoritmust megoldására a megfelelő problémát.
Rekurzív függvény - alapján a funkcionális programozás. Egy példa a funkcionális programozási nyelv LISP egy nyelvet fejlesztett 1960-ban D McCarthy. Ez az egyik első nyelv adatokat jellegű formában (LISP, a listából Processing - felsorolja feldolgozás). Az egyik legfontosabb tulajdonságait nyelv LISP, hogy az adatok, programok, és még a nyelvet is - csupán felsorolja karakterek zárójelben. Ez a szerkezet lehetővé teszi, hogy írjon programok és rutinok amelyek alkalmazni tudják magukat. [37]
A LISP használ előtag jelölés:
Függvények definiálása és kiszámítása a nyelv alapja az úgynevezett lambda kalkulus be 1931-ben És Church:
ahol # 955; - meghatározása a függvény, x1, ..., xn - formális paraméterek (lambda-lista) fn - szervezet funkcióit.
A rekurzió van jelen a strukturált programozási nyelv.
Tekintsük a példát a probléma megoldásának a Pascal segítségével rekurzió. [3]
PROBLÉMA H a. Faktoriális ismert rekurzív definíció:
Ahol n - nem negatív. Írja ezt a funkciót Pascal.
Határozat. Az első sor meghatározás egyértelműen meghatározott, hogyan kell kiszámítani a faktoriális ha az argumentum értéke nulla vagy egy. Minden más esetben számítani n! kiszámításához szükséges értéke az előző (n-1)! és szorozza meg n. Csökkenti az értéket garantálja, hogy a végén szükség van, hogy megtalálja egy! vagy 0, úgy közvetlenül kiszámítható.
kezdeni, ha (i = 1) vagy (i = 0)
kezdődik write ( 'Adjon meg egy értéket n');
writeln ( 'Faktoriális', n, az 'egyenlő', tény, (n));
Megjegyezzük, hogy az időtartam egy kisegítő algoritmus alapvető algoritmus szünetel. Ha telefonál egy új példányt egy rekurzív algoritmust átcsoportosított hely az összes deklarált változók benne, a többi példányt a változók nem állnak rendelkezésre. Ha töröl egy példányát egy rekurzív algoritmust a memóriából törlődik, és minden változót. Váltás az előző másolata rekurzív algoritmus, elérhetővé válik változókat. Tegyük fel, hogy akarjuk számítani 4. Az alap algoritmus: n = 4 bevitele után a hívás a tény (4). Az alapvető algoritmus szuszpendáljuk, és okozott működik tény, (4): 4<>1 és 4<>0, ezért az a tény: = tény, (3) * 4. funkciók a munkát felfüggesztették hívják, és működik a tény (3): 3<>1 és 3<>0, ezért az a tény: = tény, (2) * 3. Abban a pillanatban, sőt a két funkció másolja a számítógép memóriáját. Úgynevezett és dolgozik tény (2): 2<>1 és 2<>0, ezért az a tény: = tény, (1) * 2. A memória a számítógép három példányban a tény funkciót, és hívja a negyedik. Úgynevezett és dolgozik tény, (1): 1 = 1, úgy, hogy a tény, (1) = 1. Ez a funkció befejeződik, az a tény, továbbra is dolgozni (2). Valójában (2): = tény, (1) = 2 * 2 * 1 = 2. Ez a funkció is befejeződött, és a munka továbbra is tény (3) függvény. Valójában (3): = tény, (2) = 3 * 2 * 3 = 6. A munka a végéhez közeledik, és ezt a funkciót, és továbbra is tény (4) függvényt. Valójában (4): = tény, (3) = 4 * 6 * 4 = 24. Ezután vezérlés átkerül a fő program és nyomtatott válasza: „Factorial 4 24”.