2.0 KiB
2.0 KiB
Aufgabe 1
Dokumentieren Sie die Ausführung des Aufrufs binary(6), indem Sie die Auswertung aller binary-Aufrufe als eigerückte Nebenrechnungen notieren.
binary(6)
// else
binary(6 / 2) + (6 % 2) // wird zu binary(3) + 0
binary(3)
// else
binary(3 / 2) + (3 % 2) // wird zu binary(1) + 1
binary(1)
// if
return 1
-> binary(3) => 1 + 1
return 11
-> binary(6) = toInt("11" + "0")
return 110
Wie viele binary-Aufrufe werden bei der Auswertung von binary(n) in Abhängigkeit von n ausgeführt?
Bei jedem Aufruf -> n/2 bis n <= 1
tiefe = anzahl der teilungen / 2 ---> O(n) = log2(n) + 1
- 1 durch den letzten aufruf (Rekursions Anker)
Aufgabe 2
printArray([15, 3, 22, 43])
//gibt 15 aus
printArray([3, 22, 43])
// in print Array
// gibt 3 aus
printArray([22, 43])
// gibt 22 aus
printArray([43])
// gibt 43 aus
// Abbruch (length == 1)
Rekursions Anker -> array.length > 1
Rekursiver Aufruf -> printArray(Arrays.copyOfRange(arrayInput, 1, arrayInput.length))
Aufgabe 4
printArrayRev([15, 3, 22, 43])
//gibt 43 aus
printArrayRev([15, 3, 22])
//gibt 22 aus
printArrayRev([15, 3])
//gibt 3 aus
printArrayRev([15])
//gibt 15 aus
---> Abbruch (length == 1)
Rekursions Anker:
arrayInput.length == 1
Rekursiver Aufruf:
printArrayRev(Arrays.copyOfRange(arrayInput, 0, arrayInput.length - 1))
Aufgabe 4
sumRec([15, 3, 22, 43])
= 15 + sumRec([3, 22, 43])
= 15 + (3 + sumRec([22, 43]))
= 15 + (3 + (22 + sumRec([43])))
= 15 + (3 + (22 + (43 + sumRec([])))) // ABBRUCH return 0
= 15 + (3 + (22 + (43 + 0)))
Rekursions Anker:
arrayInput.length == 0
Rekursiver Aufruf:
sumRec(Arrays.copyOfRange(arrayInput, 1, arrayInput.length))