Zum Inhalt springen

iterative funktion in rekursive umschreiben


RandyK

Empfohlene Beiträge

Hallo Leute,

Wir haben die Aufgabe bekommen, eine kleine Funktion in C zu implementieren, die mittels Intervall-Schachtelung die Wurzel einer ganzen positiven Zahl berechnet. Dies soll in 4 Versionen geschehen: eine rekursiv deterministisch, eine rekursiv nichtdeterministisch, eine iterativ deterministisch und eine iterativ nichtdeterministisch.

Die iterativ deterministische ist kein Problem, allerdings hab ich nich die geringste vorstellung, wie ich die Funktion nichtdeterministisch und vor allem rekursiv darstellenn soll. Mein bisheriger Code sieht so aus:


	double wurzel(int a) {

    double li = 1.0, re = a, y;

    while(li<re) {

        y = (li+re)/2;

        if(y*y<a) {li=li+0.0001;}

        if(y*y>a) {re=re-0.0001;}

    }

    return y;

}

Ich würde mich freuen, wenn mir jemand helfen könnte!

Liebe Grüße

Randy :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hast Du nur ein Problem mit "nichtdeterministisch rekursiv" oder mit der Rekursion im Allgemeinen?

Bei einer nichtdeterministischen Programmierung muss ich leider passen. Folgender Hinweis sei aber erlaubt:

double li, re = a, y;

Damit initialisierst Du lediglich "re" - "li" und "y" bleiben undefiniert. Allein damit hast Du schon eine (wahrscheinlich ungewollt) große Dosis Zufall in Deinem Code.

Link zu diesem Kommentar
Auf anderen Seiten teilen

stimmt ja, da hast du recht..... hab allerdings festestellt, dass wenn ich li nicht mit 1 initialisiere, funktioniert der code zwar soweit, aber nich für quadrate von 16 und vielfachen, also 256, 1024, etc... keine ahnung warum....

also eigentlich hatte ich bisher keine probleme bei rekursion (Euklid, Fakultät, etc), allerdings ist ja diesmal der prototyp int wurzel(int a). Und ich hab keine ahnung wie ich die funktion mit manipuliertem li und re aufrufen kann...

danke im voraus

Randy

Link zu diesem Kommentar
Auf anderen Seiten teilen

ok, danke jetz hab ichs...

#include <stdio.h>


double wurzel(double li,double re,int a) {

	double y;

	y = (li+re)/2;

	if(li>=re-0.000001) {return y;}

	if(y*y<a) {return wurzel(y,re,a);}

	if(y*y>a) {return wurzel(li,y,a);}

}


int main() {

	int a;

	double b;

	printf("bitte positive ganze zahl eingeben:\n");

	scanf("%i",&a);

	b = wurzel(1,a,a);

	printf("%.4f",;

	return 0;

}[/code]

Also, vielen Dank an alle Beteiligten und bis bald!

Grüße Randy

Link zu diesem Kommentar
Auf anderen Seiten teilen

ok, sorry jetz bin ichs nochmal...

hätt ich fast vergessen: hat von euch einer ne ahnung, wie ich die jetzt noch nichtdeterministisch machen kann? Wär für jeden ratschlag dankbar.

ach ja, oben muss an die funktion als re a/2 übergeben werden und nicht a.... sonst funktionierts iwie nich...

grüße Randy

Link zu diesem Kommentar
Auf anderen Seiten teilen

Eine nichtdeterministische Lösung wäre z.b. zu testen ob das Quadrat einer zufälligen Zahl = der gegebenen Anfangszahl ist. Denn dann wäre ja gerade die zufällige Zahl = dem gesuchten Ergebnis

Dies kannst du ja dann noch um iterative und rekursive Komponenten ergänzen. (Intervallbereich aus dem die Zufallszahl stammt...)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...