Zum Inhalt springen

Rekursive Algorithmen


LeifLive

Empfohlene Beiträge

Liebe Nutzer,

es wäre sehr hilfreich wenn mir jemand etwas Klarheit bei folgenden wohl doch recht einfachen Algorithmen verschaffen könnte, die rekursiv formuliert sind.

Dabei wäre es nett, wenn ihr mir erklären könntet wie viele rekursive Aufrufe es gibt und wie die dann zu dem Gesamtergebnis zusammengeknüpft werden.

Ich habe da 3 Programme, wo mir die Arbeitsweise nicht ganz klar ist:

1) Rechnet GGT aus:

public class Raetsel {

public static int frage(int a, int B) {

if(b == 0) return a;

return frage(b, a - b * (a/b));

}

}

2) berechnet g hoch r (hier verstehe ich nicht was w sein soll, hat w auch 2

parameter???):

public static double bar(double g, int r) {

if (r < 0)

throw new IllegalArgumentException("does not work");

if (r == 0)

return 1;

else {

double w = bar(g, r / 2);

if (r % 2 != 0)

return w * w * g;

else

return w * w;

}

}

3) berechnet n*n, hier würd ich gerne wissen, ob für n=4 sofort der aufruf

n/2 also 2 wird?

public static int methode(int n) {

if (n == 1) {

return 1;

}

int a = methode(n / 2);

a *= 4;

if (n % 2 == 1) {

a += 2 * n - 1;

}

return a;

}

Ich wäre echt dankbar für Eure Hilfe!!!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Vielen Dank schonmal für eine erste Antwort.

Es handelt sich bei diesen rekursiven Methoden eigentlich um theoretische Aufgaben, wo man die Methode erkennen soll, also erkennen soll was sie macht. Ich habe bereits die Lösung, kann aber halt nicht nachvollziehen weshalb.

Den Code kann ich höchstens noch übersichtlicher darstellen:

Methode berechnet den GGT:

----------------------------

import AlgoTools.IO;

public class Raetsel {

public static int frage(int a, int B) {

if(b == 0) return a;

return frage(b, a - b * (a/b));

}

}

Methode berechnet g hoch r:

---------------------------

public class Foo {

public static double bar(double g, int r) {

if (r < 0)

throw new IllegalArgumentException("does not work");

if (r == 0)

return 1;

else {

double w = bar(g, r / 2);

if (r % 2 != 0)

return w * w * g;

else

return w * w;

}

}

}

Methode berechnet n*n:

------------------------

public class Fraglich {

public static int methode(int n) {

if (n == 1) {

return 1;

}

int a = methode(n / 2);

a *= 4;

if (n % 2 == 1) {

a += 2 * n - 1;

}

return a;

}

}

Ich hoffe das hilft, bzw. reicht, damit mir jemand erklären kann, wie die rekursiven Aufrufe jeweils gemacht werden, wenn man z.B. in der letzten Aufgabe für den Parameter n = 4 oder so einsetzt. Oh jetzt sehe ich, dass meine veränderte Darstellung nicht übernommen wird, ich hoffe ihr könnt mir es auch so erklären, das wäre sehr nett.

Link zu diesem Kommentar
Auf anderen Seiten teilen


Methode berechnet den GGT:

----------------------------


import AlgoTools.IO;


public class Raetsel {


  public static int frage(int a, int  {


    if(b == 0) return a;


    return frage(b, a - b * (a/b));

  }

}

[/code]




[code] Methode berechnet g hoch r: --------------------------- public class Foo { public static double bar(double g, int r) { if (r < 0) throw new IllegalArgumentException("does not work"); if (r == 0) return 1; else { double w = bar(g, r / 2); if (r % 2 != 0) return w * w * g; else return w * w; } } }

Methode berechnet n*n:

------------------------


public class Fraglich {


  public static int methode(int n) {


    if (n == 1) {

       return 1;

    }


   int a = methode(n / 2);

     a *= 4;


   if (n % 2 == 1) {

     a += 2 * n - 1;

   }


 return a;


 }


}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn du die Algorithmen nicht verstehst, dann geh diese auf einem Blatt Papier für beliebige n einmal durch. Alternativ könntest du dir die Werte mit steigender Rekursionstiefe in einem Java-Debugger anzeigen lassen.

Die Papiervariante ist zu bevorzugen imo.

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...