Datastructuren en algoritmen
Een functie fib(n) voor Fibonaccigetallen is met recursie gedefinieerd als „als n kleiner dan of gelijk aan 1 is, geef n terug; geef anders fib(n−1) + fib(n−2) terug”. Hoe vaak wordt fib aangeroepen als fib(5) wordt aangeroepen, de eerste aanroep meegerekend?
- A6
- B9
- C15
Antwoord en toelichting tonen
Antwoord: C. 15
Stel dat C(n) het aantal aanroepen voor fib(n) is. Dan geldt C(0) = C(1) = 1 en C(n) = 1 + C(n−1) + C(n−2), dus C(2) = 3, C(3) = 5, C(4) = 9 en C(5) = 15. Omdat dezelfde waarden steeds opnieuw worden berekend, groeit het aantal exponentieel met n; fib(30) doet ongeveer 2,69 miljoen aanroepen. Met memoisatie (een vorm van dynamisch programmeren), die berekende waarden in een tabel bewaart, worden alleen de zes waarden fib(0) tot fib(5) berekend en daalt het aantal aanroepen tot 9 (2n − 1). 6 is het aantal verschillende argumenten, en 9 het aantal aanroepen met memoisatie.