Table of Contents
- 1. rekurzivna procedura v Lisp-u odraža princip, da se pri klicanju procedure sklicuje na samo proceduro
- 2. rekurziven proces opisuje obliko evolucije računskega postopka
- 3. procedura kliče samo sebe, dokler ni dosežen robni pogoj (aplikativni red)
- 4. pri tem mora interpreter v spominu ohranjati zapis o potrebnih izvedbah procedure –> zaradi tega prostorska zahtevnost O(n)
- 5. to se imenuje veriga preloženih operacij (? chain of deferred operations)
- 6. ko se funkcija kliče na vhodu, ki ustreza robnim pogojem, se nato v nasprotnem vrstnem redu funkcija aplicira na vhodno vrednost in izvede –> časovna zahtevnost O(n)
- 7. klasičen primer: fakulteta \[n!\]; rekurzivna definicija: \[n! = n(n-1)!\]
- 8. stanje procedure je enolično opisano na vsakem koraku: spremenljivke stanja
- 9. poleg tega obstaja enoličen predpis za pripisovanje novih (posodobljenih) vrednosti spremenljivkam stanja po vsaki izvedbi procedure
- 10. prostorska zahtevnost je tako O(1) - stanje je vsakič shranjeno v istem številu spremenljivk
- 11. časovna zahtevnost je O(n)
- 12. tudi pri iterativnih procesih procedura kliče sama sebe, vendar je razlika v postopku izvajanja; medtem ko se mora rekurzivni proces zaradi pomnenja verige preloženih operacij izvesti v celoti, lahko iterativni proces na katerikoli točki prekinemo in nato nadaljujemo na podlagi vrednosti spremenljivk stanja ob prekinitvi
- 13. v tem primeru govorimo o repni rekurziji (slovarček); zanke (while, for, …) v ostalih jezikih so tako samo posebne sintaktične oblike repne rekurzije
- 14. pri linearni rekurziji vsak korak vsebuje en klic procedure
- 15. če se na posameznem koraku procedura kliče večkrat (korak je odvisen od večih prejšnjih vrednosti), je struktura procesa drevesna
- 16. eksponentna časovna zahtevnost: O(exp(n))
- 17. linearna prostorska zahtevnost: O(n) - v spominu moramo na vsakem koraku ohraniti samo vrednosti v vozliščih na prejšnjem nivoju globine drevesa
- 18. klasični primer: Fibonaccijeva števila; \[Fib(n) = Fib(n-1) + Fib(n-2)\]
## Vzorci evolucije procesov
procedura: vzorec lokalne evolucije računalniškega procesa
Kaj pa lahko rečemo o globalnih vzorcih?
### 1.2.1 Linearna rekurzija in iteracija
razlika med rekurzivno proceduro in rekurzivnim procesom:
1. rekurzivna procedura v Lisp-u odraža princip, da se pri klicanju procedure sklicuje na samo proceduro
2. rekurziven proces opisuje obliko evolucije računskega postopka
Rekurzivni procesi:
3. procedura kliče samo sebe, dokler ni dosežen robni pogoj (aplikativni red)
4. pri tem mora interpreter v spominu ohranjati zapis o potrebnih izvedbah procedure –> zaradi tega prostorska zahtevnost O(n)
5. to se imenuje veriga preloženih operacij (? chain of deferred operations)
6. ko se funkcija kliče na vhodu, ki ustreza robnim pogojem, se nato v nasprotnem vrstnem redu funkcija aplicira na vhodno vrednost in izvede –> časovna zahtevnost O(n)
7. klasičen primer: fakulteta \[n!\]; rekurzivna definicija: \[n! = n(n-1)!\]
Iterativni procesi:
8. stanje procedure je enolično opisano na vsakem koraku: spremenljivke stanja
9. poleg tega obstaja enoličen predpis za pripisovanje novih (posodobljenih) vrednosti spremenljivkam stanja po vsaki izvedbi procedure
10. prostorska zahtevnost je tako O(1) - stanje je vsakič shranjeno v istem številu spremenljivk
11. časovna zahtevnost je O(n)
Razlike:
12. tudi pri iterativnih procesih procedura kliče sama sebe, vendar je razlika v postopku izvajanja; medtem ko se mora rekurzivni proces zaradi pomnenja verige preloženih operacij izvesti v celoti, lahko iterativni proces na katerikoli točki prekinemo in nato nadaljujemo na podlagi vrednosti spremenljivk stanja ob prekinitvi
13. v tem primeru govorimo o repni rekurziji (slovarček); zanke (while, for, …) v ostalih jezikih so tako samo posebne sintaktične oblike repne rekurzije
### 1.2.2 Drevesna rekurzija