Frage zu einer Rekursiven Funktion

starbug

Erfahrenes Mitglied
hi leute ich hab hier ne aufgabe die ich nicht wirklich lösen kann:

Für 0 gilt: länge(0) = 1189 mm
breite(0) = 841 mm

für alle n > 0 gilt: länge(n) = breite(n-1)
breite(n)= ½ * länge(n-1)

Schreiben Sie eine rekursive Methode, für die Länge eines beliebigen
Formates.
Hinweis:
Es gilt: länge(n) = breite(n-1) = ½ * länge(n-2).

da ich ja nur die länge berücksichtigen muss hab ich auch die breite in meiner methode gar nicht berücksichtigt. hier mal mein ergebnis:

public double flaenge(double n)
{
double res = 0;
if(n==0)
{
res = 12;

} else {

res = 1/2*flaenge(n-2);
}
return res;
}

bekomme aber immer ne exception. kann mir jemand helfen****?
 
Das Problem wird wohl das -2 sein. Sobald du eine ungerade Zahl einsetzt, erzeugst du eine Endlosrekursion, da deine Bedingung nur überprüft ob n = 0 ist, versuch es mal mit n <= 0.
 
Also wenn ich die Aufgabenstellung einfach naiv runter tippe, sieht das so aus:

Java:
public double laenge(int n) {
	if(n < 0)
		throw new IllegalArgumentException();

	if(n == 0)
		return 1189d;
	else
		return breite(n - 1);
}

public double breite(int n) {
	if(n < 0)
		throw new IllegalArgumentException();

	if(n == 0)
		return 841d;
	else
		return 0.5d * laenge(n - 1);
}

Du hast unter anderem den Fehler gemacht, eine Fließkommazahl mit "==" zu vergleichen. Das haut aber selten hin, weil die Zahlen nicht exakt dargestellt werden könnten (siehe http://de.wikipedia.org/wiki/IEEE_754).

Aber das brauchst du gar nicht, weil der Parameter ja eine Ganzzahl sein soll.
 
Ich wusste mich stört was bei der Aufgabe :)

In der Aufgabe wird das Seitenverhältnis von Papier der A Reihe Beschrieben wobei die Seiten Verhältnisse sich so ändern das die 1/2 Länge die Breite der nächst kleineren Papier Größe ist.

Daher denke ich das dein Ansatz mit du brauchst die breite nicht nochmal überdacht werden sollte

wie CPoly es vormacht ;)
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück