Übungsaufgaben
Zehn Übungen zum Klicken, Zuordnen, Rechnen und Knobeln — von AFB I bis AFB III. Jede Übung gibt dir sofort Rückmeldung; wenn du nicht weiterkommst, helfen die gestuften Tipps.
Gib die Schritte beim Entwurf einer rekursiven Methode in der richtigen Reihenfolge an.
Ordne jedem Problem die Abbruchbedingung zu, die zu einer naheliegenden rekursiven Lösung passt.
n == 0
n < 10
s.length() == 0
i == a.length
Gesucht ist eine rekursive Methode für \(b^e\) mit \(e \ge 0\). Nenne alle Aussagen, die als Abbruchbedingung oder Zerlegung korrekt sind.
Wende die Methode ziffernProdukt auf verschiedene Zahlen an.
static int ziffernProdukt(int n) {
if (n < 10) return n;
return n % 10 * ziffernProdukt(n / 10);
}
-
ziffernProdukt(234)= -
ziffernProdukt(5)= -
ziffernProdukt(1203)= -
Aufrufe bei
ziffernProdukt(98765): Aufrufe
% 10, Rest mit / 10.Bestimme zu jedem Problem den passenden Rekursionsschritt.
% und ganzzahliges /) und Kapitel 2 (Reihung mit Index). Die Binärdarstellung hängt die letzte Ziffer hinten an — deshalb steht der Selbstaufruf vorn.a[i] — sie gehören zu Reihungen.Die Methode soll zählen, wie oft x in a ab Index i vorkommt. Überprüfe sie.
Erstelle aus den Bausteinen eine Startmethode minimum(a) und eine rekursive Hilfsmethode minimum(a, i) für nicht leere Reihungen.
i == a.length griffe a[i] hinter das Ende (ArrayIndexOutOfBoundsException), mit minimum(a, i) endete die Rekursion nie.Entwirf Schritt für Schritt eine rekursive Methode istAufsteigend(a, i).
Untersuche die Methode f: Welchen Wert liefert f(9875)?
static int f(int n) {
if (n < 10) return n;
return f(n % 10 + f(n / 10));
}
f(n / 10) steckt im Parameter des äußeren. f(98) = f(8 + f(9)) = f(17) = f(7 + 1) = 8, f(987) = f(7 + 8) = f(15) = 6, f(9875) = f(5 + 6) = f(11) = 2. Die Methode bildet so lange Quersummen, bis eine Ziffer übrig bleibt (9 + 8 + 7 + 5 = 29 → 11 → 2). Wer 29 antwortet, hat nur die erste Quersumme gebildet.anzahlTeiler(n, t) soll die Teiler von n zählen, die mindestens t groß sind; gestartet wird so, dass alle Teiler gezählt werden. Implementiere die Methode, indem du die Lücken füllst.
static int anzahlTeiler(int n, int t) {
if (t > n) return ;
if (n % t == 0) return ;
return ;
}
// Start: anzahlTeiler(12, ) liefert 6
t läuft von 1 bis n; danach ist nichts mehr zu zählen. Mit dem Start bei 0 gäbe n % 0 eine ArithmeticException, mit 2 fehlte der Teiler 1. Die Rekursionstiefe ist n + 1 — für große n wäre eine Schleife besser.