rekursive Summenberechnung

Status
Nicht offen für weitere Antworten.

dark_Jeedee

Mitglied
Hi ich steh hier vor einem für mich unlösbaren problem.

Die Aufgabe lautet :

Entwickeln Sie eine rekursive Methode, die für einen positiven int Parameter n die Summe der ersten n Brüche 1/n als reelle Zahl zurückgibt.

Einer meiner kläglichen Versuche :


Code:
public static double add(int n)
{
if (n == 0)
{
return 0;
}
else
{

return (1/n)+(1/add(n-1));

}
}


ich hatte auch schon probiert mit math.pow(double n , -1)
und dann noch einen parameter x da rein zubringen das ich n-x habe und x dann hochzählen lasse aber das hat auch nicht geklappt.

Hoffe mir kann jemand helfen.

Gruß Tobi
 
bei 0 kannst du nicht aufhören, da division durch 0 scheitert. Ein guter Zeitpunkt wäre 1.
Das add liefert schon 1/n + den nächsten Schritt: also 1/(n-1).
das 1/ (1/n-1) stimmt nicht. also reicht + add(n--)
 
hey danke für die schnelle antwort. aber wenn ich den code so veränder

Code:
public static double add(int n)
{
if (n == 1)
{
return 1;
}
else
{

return (1/n)+ add(n--);

}

und das ganze dann zb für n = 4 durchlaufen lasse müsste irgendwas mit 2,08 rauskommen.
jedoch bekomm ich ne fehlermeldung "java.lang.StackOverflowError"
 
hab den rasch bei mir getestet
Code:
    public static double add(int i){
        if(i == 1){
            return 1;
        }
        return 1d/i + add(--i);
    }

StackOverflow ja...bei so ca 5500
 
dark_Jeedee hat gesagt.:
hey danke für die schnelle antwort. aber wenn ich den code so veränder

Code:
...
return (1/n)+ add(n--);

Dort wird ERST n an 'add' übergeben, und DANACH wird n um 1 verringert. Mit

return (1/n)+ add(--n); // Erst verringern, dann übergeben
oder
return (1/n)+ add(n-1); // Das Verringerte übergeben

würde es funktionieren
 
guten morgen danke der code funktioniert jedoch müsste mir noch einer
erklären
Code:
return 1d/i + add(--i);
warum da ein "d" steht. dann bin ich glücklich ^^.
 
Wenn du das "d" weglaesst, dividiert Java 2 Integer, was in deinem Falle (n>=1) immer 0 liefern wuerde. Das "d" sagt dem Compiler, eine double 1 zu nehmen.

Du koenntest auch "1.0" oder "1." schreiben.

An deiner Stelle wuerde ich auch anstatt
Code:
return 1d/i + add(--i);

folgendes schreiben:

Code:
return 1d/i + add( i-1 );

Zudem wird ab einem entsprechend grossem i das Ergebnis mehr oder weniger stark verfaelscht. Du solltest dir deshalb mal die Klasse "BigDecimal" ansehen. Damit wird zwar alles langsamer, dafuer aber genau(er).
 
hi ihr da draußen.
ich steh vor dem nächsten problem 😳

Mein Problem ist erstmal das ich nichtmal einen Pseudocode zu dieser Aufgabe aufstellen kann.

Aufgabe:

Schreiben Sie eine rekursive Methode, die alle Zeichenketten mit drei Buchstaben ausgibt, die
aus den genetischen Codes A, C, G und T bestehen. ¨Uberlegen Sie zun¨achst, wie Sie alle Folgen
aus zwei Buchstaben erzeugen k¨onnen und erweitern Sie dann die gefundene L¨osung.
Die Ausgabe soll folgendes Aussehen haben: AAA AAC AAG AAT ACA ACC ACG ACT
AGA AGC usw.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben