1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

die Methode Potenz (iterativ und rekursiv @ JAVA)

  • freakjan
  • 10. Januar 2006 um 12:20
  • Unerledigt
  • freakjan
    7
    freakjan
    Mitglied
    Punkte
    450
    Beiträge
    64
    • 10. Januar 2006 um 12:20
    • #1

    hallo :tongue1:

    Aufgabe: Programmieren Sie je eine iterative und eine rekursive Methode zur Berechnung von x^y.

    Aber mein Problem war an der ganzen Sache, dass ich nach der langen Suchaktion immernoch nicht 100% den Unterschied finde???
    Iteration ist mir klar (for, while, do/while) und eine Rekursion bedeutet, dass die Funktion sich selbst aufruft...... ODER :confused: :confused:
    Kann man bei der Rekursion auch (for, while, do/while) oder (if/else) benutzen?? :confused:

    Aber bei so eine einfache Aufgabe wie Potenz, kann man doch eine Rekursion nicht verwenden, zumindest ich hab das nicht hingekriegt :frowning_face:


    iterativ:

    PHP
    public class Potenz {
     
    public static void main (String [] args) {
     
     
    int x, y, i, potenz;
     
    x= Integer.parseInt (args[0]);
    y= Integer.parseInt (args [1]);
    potenz=1;
     
    for (i=1 ; i <= y ; i = i + 1)
    potenz = potenz * x;
     
    System.out.println ("X^Y= " + potenz);
     
    } 
    }
    Alles anzeigen




    // javac Potenz.java
    // java Potenz x y

    rekursiv:

    PHP
    public class PotenzRekur {
    public static void main (String [] args) {
     
    int x; // x^y
    int y;
     
    x= Integer.parseInt (args[0]);
    y= Integer.parseInt (args[1]);
    Potenz (x,y);
    }
     
    public static void Potenz (int x, int y){
     
    int i;
    int potenz =1;
     
    for (i=1 ; i <= y ; i = i + 1)
    potenz = potenz * x;
     
    System.out.println ("X^Y= " + potenz);
    }
     
    }
    Alles anzeigen




    // javac PotenzRekur.java
    // java PotenzRekur x y

    Danke :thumb:
    ciao :zwinker:

  • a9bejo
    21
    a9bejo
    Mitglied
    Reaktionen
    42
    Punkte
    4.697
    Beiträge
    913
    • 10. Januar 2006 um 13:31
    • #2

    Ein Recursiver algorithmus fuer die potenz von positiven, ganzen zahlen koennte z.b so aussehen:

    Code
    public static int powerRecursive(int x, int y){
      return (y==0) ? 1 : x * powerRecursive(x, y-1); 
    }

    hier der selbe algorithmus auf mehrere zeilen aufgespalten. vielleicht ist das leserlicher:

    Code
    public static int powerRecursive2(int x, int y){
        int result = 0;
        if(y == 0){
          result = 1;
        }else{
          result = x * powerRecursive2(x, y-1); 
        }
        return result;
      }


    und hier ist ein iterativer ansatz:

    Code
    public static int powerIter(int x, int y){
        int result = x;
        for(int i=1;i<y;i++){
          result = result * x;
        }
        return result;
      }


    Aber achtung!

    Es gibt einen unterschied zwischen einer rekursiven methode und einem rekursiven algorithmus.

    eine rekursive methode ist eine methode, die sich selber aufruft. Ein rekursiver algorithmus drueckt die loesung durch sich selber aus.

    Man kann einen iterativen algorithmus auch mit hilfe einer rekursiven methode ausdruecken:

    Code
    public static int powerIter2(int x, int y) {
        return powerIter2Helper(x, y, 1);
      }
    
    
    
    
      public static int powerIter2Helper(int x, int y, int result) {
        if (y == 0) {
          return result;
        } else {
          return powerIter2Helper(x, y - 1, result * x);
        }
      }
    Alles anzeigen

    hier druecke ich nicht das ergebnis durch sich selbst aus, sondern multipliziere die faktoren y mal, genauso wie ich es in powerIter gemacht habe. Ich habe halt nur das while konstrukt durch einen rekursiven aufruf ersetzt. der algorithmus ist aber immer noch der gleiche, also iterativ.

    interressant ist hier noch, dass der iterative ansatz weniger speicher verbraucht als der rekursive. Rekursive algorithmen sind dafuer in der regel simpler und einfacher zu lesen. Zumindest wenn man mit rekursion etwas uebung hat.

    lg, Benjamin Ferrari, bookworm.at

  • Maximilian Rupp 27. Dezember 2024 um 12:06

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung