18.07.2013 Views

Noter om R

Noter om R

Noter om R

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!