Rekursjon
Nullpunkt til en funksjon
Vi skal programmere en løsning som finner nullpunkt til en gitt funksjon.
Jeg har valgt f(x) = x³ +2 som eksempelfunksjon.
Jeg velger halveringsmetoden, vi antar at f(a)*f(b) < 0 slik at vi har minst
en kryssing av x-aksen, antar også at funksjonen er kontinuerlig.
Rekursjon - det at en funksjon bruker seg selv - er en metode som er godt egna til å oversette en matematisk algoritme til et program.
Typisk dersom vi har kode som refrerer til tidligere verdier: Sn = Sn-1 osv, da vil rekursjon være en egna metode.
Alternativet til rekursjon er å lage en løkke, men da må vi selv føre regnskap med verdiene på variablene som endrer seg for hver iterasjon.
I eksemplet under er endpunktene a og b de som endrer seg - merk at solve(a,b) bruker seg selv med solve(a,c) eller solve(c,b). c er midtpunktet og metoden velger enten a eller b avhengig av hvor nullpunktet må være.
I en rekursiv funksjon er det helt nødvendig å starte med slutt-kriteriet for funksjonen før den kaller opp seg selv (starter seg selv på nytt). Uten betingelse for slutt vil funksjonen kalle seg selv opp i en uendelig løkke (som tar brått slutt når maskinen ikke har mer minne tilgjebgelig).
For solve() har jeg to kriterier for å avslutte - enten antall iterasjoner er > 200 eller avstand mellom a,b er mindre enn 0.000...1 (ønska presisjon).
I koden har jeg en unødvendig funksjonsberegning - resultatet blir aldri brukt. Dersom du skriver koden i visual studio code ville denne være markert med grå farge. Alle ubrukte variable markeres slikt. Vanligvis har du da feil i koden eller har lagt en plan som du har endra/ikke fulgt. Uansett - se over og fjern variabelen eller ta den i bruk (dersom tanken var riktig, men ufullført).
Du kan teste koden her: