bild
Skolan för
elektroteknik
och datavetenskap

Uppgift 6

Uppgiften ska lämnas till din övningsledare på övningen 2,4/11. Glöm inte försättsbladet (pdf) och att alla papper ska häftas samman eller lämnas in i en plastficka.

För godkänt måste du ha gjort samtliga deluppgifter. Det är tillåtet att göra enstaka fel och misstag men det är viktigt att du försöker lösa samtliga uppgifter. Om du kör fast med någon uppgift så finns det som vanligt hjälp att få på labbarna.

Hemuppgift

Studera avsnitt 4.12-4.13 i programmeringsboken.

Skriftlig uppgift

Gör ändringarna i uppgift 4.54-4.59 i projektet weblog-analyzer och lämna in en uskrift av den modifierade klassen.

Här är två metoder som använder sig av rekursiva metodanrop. Sätt dig in i hur de fungerar och gör sedan alternativa implementationer som använder iteration (while- eller for-sats).

/**
 * Computes n!.
 * Precondition: 0 <= n <= 20.
 * (20! < 2^63 - 1, the maximum value of a long.)
 */
public long factorial(int n) {
    if (n == 0) {
        return 1;
    } else {   // n > 0
        return n*factorial(n - 1);
    }
}

/**
 * Computes the sum of the elements from v[first] to v[last].
 * Precondition: 0 <= first <= last < v.length.
 */
public long sum(int[] v, int first, int last) {
    if (first == last) {
        return v[first];
    } else {   // first < last
        return v[first] + sum(v, first + 1, last);
    }
}

Gör två implementationer, en iterativ och en rekursiv, av en metod som returnerar det maximala värdet i en vektor. Metoden ska ha följande signatur:

public int max(int[] v)

(Tips: använd gärna en privat hjälpmetod.)

Valfri uppgift

Gör även uppgift 4.60 och 4.61 i projektet weblog-analyzer.

Copyright © Sidansvarig: Stefan Nilsson <snilsson@nada.kth.se>
Uppdaterad 2011-09-26