fh.h42.de - What´s the question?
Navigation: [START] [00-ws] [prog] [p-java003.htm]
[print]  [e-mail]  [main]

Java - Rekursion & Funktionen


Lösung zu Übung 12, Aufgabe 1:
/* Fibonacci.java
$DATE (12.01.2001)
$AUTH Lars Ehrhardt
$VER  1.0

   Berechnet die Werte 10, 20, 30, 40 für die Fibonacci-Funktion!
   Es wird jeweils die Berechnung durch eine iterative und durch
   eine rekursive Funktion durchgeführt.
   Ein Test des Programms zeigt, dass die rekursive Funktion
   besonders bei den höheren Zahlen wesentlich länger braucht, als
   die iterative!
 */

public class Fibonacci {

    public static void main (String[] args) {

        for(int i = 10; i <= 40; i = i + 10){
            System.out.println ("Iterativ: Fibonacci(" + i + ") ist: " + fibite(i));
            System.out.println ("Rekursiv: Fibonacci(" + i + ") ist: " + fibrek(i));
        }
    }

    static int fibrek (int n) {
        int w1, w2;
        if (n < 0)
            return 0;
        else
            if (n < 2)
                return 1;
            else {
                w1 = fibrek(n-2); // Position y
                w2 = fibrek(n-1); // Position z
                return (w1 + w2);
            }
    }

    static int fibite (int n) {
        if (n < 0)
            System.out.println("Fehler: Funktion mit einem Wert <0 aufgerufen!");
            return 0;
        else
            if (n < 2)
                return 1;
            else {
                int w0 = 1;
                int w1 = 1;
                int w2 = 0;
                for(int i=1; i < n; i++)
                    {
                        w2 = w1 + w0;
                        w0 = w1;
                        w1 = w2;
                    }
                return w2;
        }
    }
}

Lösung zu Übung 12, Aufgabe 2:
/* Add.java
$DATE (12.01.2001)
$AUTH Lars Ehrhardt
$VER  1.0

   Dieses Java-Programm realisiert die add-Funktion mittels primitiver Rekursion.

   add (x,0) = g(x) = x
   add (x, y+1) = h(x,y,add(x,y)) mit h (x,y,z) = succ(z)

 */

public class add {
    public static void main (String[] arguments) {
        int x, y,w;
        x = 0;
        y = 10;
        w = add(x,y);

        if (w < 0)
            System.out.println("Fehler: Bitte nur y-Werte <= 0 eingeben!");
        else
            System.out.println("Die Addition von " + x + " mit " + y +" ist " + w + "!");
    }

    static int add (int a, int b) {
        int z;
        if (b < 0)
            return(-1);  //Fehler: y-Werte < 0 nicht zulässig!
        else {
            if (b == 0)
                return (a);
            else {
                z = add(a+1, b-1);
                return(z);
            }
        }
    }
}

Lösung zu Übung 12, Aufgabe 3:
/* Schnittpunkt.java
$DATE (12.01.2001)
$AUTH Lars Ehrhardt
$VER  1.0

Übung 12 - Aufgabe 3:
Berechnen Sie den Schnittpunkt zweier Geraden anhand von Determinanten.

Hintergrundinformationen:
2,2-Matrix [a b]
           [c d]
Determinante (a,b,c,d): (a*d)-(b*c)

Eine Gerade wird durch folgende Mathematische Gleichung beschrieben:
a*x + b*y = 0 (wobei a und b != 0 sein müssen!)

Der Schnittpunkt zweier geraden existiert wenn die folgende
Determinantengleichung ungleich 0 ist: (a1*b2) - (b1*a2)
Dann ergibt sich der Schnittpunkt aus:
x = det(c1,b1,c2,b2)/det(a1,b1,a2,b2)
y = det(a1,c1,a2,c2)/det(a1,b1,a2,b2)
Eine Nulldivision kann dabei nicht auftreten da dann die
Geraden parallel oder übereinander liegen!
*/

class Schnittpunkt {
    public static void main (String arguments[]){

        IsCrossed(1,2,3,4,5,6);
        IsCrossed(1,2,3,2,4,6);
    } // end main

    public static void IsCrossed (int a1, int b1, int c1, int a2, int b2, int c2){

        System.out.print("Bei den Werten " + a1 + "," + b1 + ","+ c1 +" und " + a2 +"," + b2 +"," + c2 + " ");

             if (det(a1,b1,a2,b2) == 0)
            System.out.println("sind die Geraden parallel oder liegen übereinander!");
        else {
            int x, y;
            x = (det(c1, b1, c2, b2) / det(a1, b1, a2, b2));
            y = (det(a1, c1, a2, c2) / det(a1, b1, a2, b2));
            System.out.println("liegt der Schnittpunkt der beiden Geraden bei (" + x +"," + y +  ")!");
        } // end else
    }        // end IsCrossed

    public static int det(int a, int b, int c, int d){
            return((a*d)-(b*c));
    } //end det

} // end class


(Keine Garantie auf Richtigkeit!)
zurück zur Übersicht
News
12.10.: Seiten zum WS03 aktualisiert
02.09: Seite zum WLAN-Projekt aktualisiert
10.04: Seiten zum SS03 aktualisiert
12.08: Eigene Vorlage für Seminararbeiten der FH hinzugefügt
14.07: Informationen zum 5. Semester hinzugefügt.
14.07: Druckfunktion für die Seiten überarbeitet: Auflistung der Hyperlinks über Fußnoten realisiert.
04.06: Links für IT-Sec neu strukturiert
27.04: Projekte des SS02 hinzugefügt
07.04: Lehrveranstaltungen des SS02 hinzugefügt
07.04: Dokumentation zum X-Terminals Projekt
Navigation: [START] [00-ws] [prog] [p-java003.htm]
[print]  [e-mail]  [main]