1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • 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
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • freakjan
    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 :(


    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

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

  • Maximilian Rupp 27. Dezember 2024 um 12:06

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

  1. Datenschutzerklärung
  2. Impressum