Heron Verfahren Tail-rekursiv lösen

hay95

Mitglied
public class Recursion02 {



public static void main(String[] args) {


System.out.println("Test Palindrome");

System.out.println("OTTO: " + isPalindrome("OTTO"));

System.out.println("REGINEWETTEWENIGER: " + isPalindrome("REGINEWETTEWENIGER"));

System.out.println("EIDI1: " + isPalindrome("EIDI1"));



System.out.println("\nTest Heron");

double[] ds = new double[]{-2, -0.1, 0.5, 1, 1.25, 1.5, 1.75, 2, 3, 5, 25};

for (double d : ds) {

heronTr(2, d);

System.out.println();

}

}



private static boolean isPalindrome(String s) { //Vllt hat jmd einen Ansatz wie man tail-rekursiv einen String auf Palindrome untersuchen kann

//TODO: a)

return false;

}


private static void heronTr(double a, double x0) { //Wollte nachfragen ob ich das Heron Verfahren tail- rekursiv geschrieben habe und so passt

//TODO: b)

double y = (x0 + a / x0) / 2;

if (Math.abs(x0 - y) < 0.000000001) {
System.out.println(x0);
}

else {
heronTr(a,y); // das ist der rekursive Aufruf



}

}



}

Kann mir jemand sagen ob dies tail-rekursiv ist. Habe etwas Schwierigkeiten mit dem Thema Rekursion noch.
Vielen Dank,
hay95.
 

fhoffmann

Top Contributor
Hallo,

soll das Heron-Verfahren die Wurzel ausgeben oder zurückgeben?

Wenn der String nur aus einem oder keinem Zeichen besteht, ist er ein Palindrom.
Wenn das erste und letzte Zeichen unterschiedlich sind, ist es kein Palindrom.
Ansonsten untersuche, ob der String vom zweiten bis zum vorletzten Zeichen ein Palindrom ist.
 

hay95

Mitglied
Hallo,

soll das Heron-Verfahren die Wurzel ausgeben oder zurückgeben?

Wenn der String nur aus einem oder keinem Zeichen besteht, ist er ein Palindrom.
Wenn das erste und letzte Zeichen unterschiedlich sind, ist es kein Palindrom.
Ansonsten untersuche, ob der String vom zweiten bis zum vorletzten Zeichen ein Palindrom ist.
(i) Implementieren Sie die Methode heron(double a, double x0), welche, ausgehend von x0 = x0, √ a berechnet und das Ergebnis ausgibt. Benutzen Sie Tail-Rekursion.
(ii) Testen Sie ihre Implementierung für √ 2 ≈ 1.41421356237 und x0 ∈ {−2, −0.1, 0.5, 1, 1.25, 1.5, 1.75, 2, 5, 25}. Zählen Sie jeweils die Anzahl der Schritte bis zum Abbruch. Was fällt bei den Ergebnissen auf?
Dies ist die Aufgabe für das Heron -Verfahren.

und Danke das hilft mir sehr weiter.
 

hay95

Mitglied
private static boolean isPalindrome(String s) {

//TODO: a)

if( s.length() == 0|| s.length() ==1){

return true;

}

if(s.charAt(0)==s.charAt(s.length()-1)){

return isPalindrome(s.substring(1,s.length()-1));

}



return false;

}

Hallo ich habe mir dies für die Palindrom Aufgabe überlegt , stimmt dies so und vorallem liegt hier eine tail-rekursion vor. Weil ich soll diese mit der tail-rekursion lösen.
Vielen Dank,
Hay95.
 

temi

Top Contributor
Wobei strenggenommen (laut den Definitionen, die ich kenne) auch das ein Palindrom ist: Regal - Lager.

Es ist natürlich recht schwierig zu prüfen, ob ein Wort rückwärts gelesen noch sinnvoll ist, in diesem Fall gilt wohl das, was @fhoffmann geschrieben hat.
 

hay95

Mitglied
Wobei strenggenommen (laut den Definitionen, die ich kenne) auch das ein Palindrom ist: Regal - Lager.

Es ist natürlich recht schwierig zu prüfen, ob ein Wort rückwärts gelesen noch sinnvoll ist, in diesem Fall gilt wohl das, was @fhoffmann geschrieben hat.
In der Aufgabenstellung steht extra dran, dass wir nur Überprüfen müssen ob Sequenz der Buchstaben von vorne und hinten gleich wäre also wäre dieser Fall in der Aufgabenstellung falsch
 

Ähnliche Java Themen

Neue Themen


Oben