Noter om R
Noter om R
Noter om R
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
19.2.2 Eksempel: Fakultetsfunktionen<br />
S<strong>om</strong> eksempel på anvendelse af et if . . . else udtryk i en rekursiv funktion vil vi implementere fakultetsfunktionen<br />
x!, defineret for naturlige tal x s<strong>om</strong><br />
<br />
1, hvis x = 1 (grundtilfældet),<br />
x! =<br />
x ·(x − 1)! ellers (generelt tilfælde).<br />
Bemærk at definitionen er rekursiv: x! er defineret ved hjælp af (x − 1)!, så fakultetsfunktionen er defineret<br />
ved hjælp af sig selv. Vi følger definitionen nøje og implementerer funktionen fak rekursivt:<br />
> fak fak(4)<br />
[1] 24<br />
Forgreningen i grundtilfældet x = 1 og det generelle tilfælde x > 1 implementerede vi altså med et if<br />
. . . else udtryk.<br />
For til fulde at forstå hvordan en rekursiv funktion virker kan man med fordel håndkøre den for<br />
en passende lille værdi af argumentet/argumenterne (for at få et lille antal rekursive kald). Håndkørsel<br />
vil sige at bruge blyant og papir og “lege R” ved at skrive beregningerne ud i hånden. Håndkørsel af<br />
fak(4) kan se således ud:<br />
Håndkørsel:<br />
fak(4) = x = 4 = 1, dvs. else-grenen vælges:<br />
4*fak(3) = x = 3 = 1, dvs. else-grenen vælges igen:<br />
4*3*fak(2) = x = 2 = 1, dvs. else-grenen vælges igen:<br />
4*3*2*fak(1) = x = 1, dvs. if-grenen vælges:<br />
4*3*2*1 = herfra skal der bare ganges ud:<br />
24<br />
Lige s<strong>om</strong> med løkker kan det nogle gange være en fordel at sætte print-kald ind i en rekursiv<br />
funktion for at finde fejl eller bare forstå hvad der foregår. Her er fakultetsfunktionen igen, denne gang<br />
med print af x og af hvilken gren, der vælges:<br />
fak