Tiedän että funktionaalisessa ohjelmoinnissa käytetään paljon rekursiivistä ohjelmointitapaa mutta yhtenä esimerkkisivuna
https://wiki.freepascal.org/Fibonacci_number/fi
mainitaan tai annetaan se vaikutelma että iteratiivinen toteutus on parempi.
https://wiki.freepascal.org/Fibonacci_number/fi
mainitaan tai annetaan se vaikutelma että iteratiivinen toteutus on parempi.
Vastaukset 4
Vanhimmat
Tämä sinun kyseenalaistaminen ontuu pahasti. Viestisi voi tiivistää sanoihin:
Päivällä ihminen näkee paremmin kuin yöllä.
On itsestään selvyys, että kun funktio kutsuu itseään, tulee rajat vastaan nopeasti, ja sen vuoksi itseään kutsuvia funktioita voidaan käyttää vain kun tunnetaan ja tiedetään vaadittava resurssi tarve voidaan tyydyttää.
Ne rajat tulee vastaan työkaluissa missä on hyvin rajallinen pinomuisti mikä hupenee rekursiossa. Näissä tarvitsee laskea mikä on pahin mahdollinen tilanne mikä rekursiolla tulee, että ei pino ei vuoda yli ja tarvittaessa muuntaa ongelmalliset kohdat iteratiivisiksi.
Funktionaalisella toteutuksella välttää sivuvaikutukset mikä estää tehokkaasti bugeja ja mahdollistaa koodin ajamisen rinnakkain useassa säikeessä eri CPU ytimillä.
Sitä voi siis valita paremmat työkalut.
Tuolla on laskettu Fibonaccia niin että tuloksia otetaan mappiin talteen ja aina ensiksi tarkistetaan löytyykö sieltä.
https://en.wikipedia.org/wiki/Dynamic_programming
https://www.youtube.com/watch?v=OQ5jsbhAv_M
En tuosta mitään ymmärrä ensi katselemalla,
https://gist.github.com/YoEight/9710441
Mutta tuohon linkki oli tästä
https://www.reddit.com/r/compsci/comments/2cia77/how_does_pure_functional_programming_do_dynamic/