001    package de.hska.java.aufgaben.rekursion;
002    
003    /**
004     * Rekursive Implementierungen für die Addition und Multiplikation
005     * zweier natürlicher Zahlen. Zur Berechnung der Ergebnisse
006     * wird nur Addition und Subtraktion von Eins verwendet.
007     * 
008     * <p>
009     *   <a href="http://www.home.hs-karlsruhe.de/~pach0003/informatik_1/aufgaben/rekursion.html#rekursive_arithmetik">Zurück zum Aufgabentext</a>
010     * </p>
011     * @author Christian Pape
012     *
013     */
014    public class ArithmetikRekursiv {
015    
016            /**
017             * Addiert a und b und gibt die Summe zurück.
018             * Der Zeitaufwand ist O(a+b).
019             * 
020             * @param a eine Zahl grösser gleich 0
021             * @param b eine Zahl grösser gleich 0
022             */
023            public int addieren(int a, int b) {
024                    if (b == 0 && a == 0) {
025                            return 0;
026                    } else if (a == 0) {
027                            return 1 + addieren(0, b - 1);
028                    } else {
029                            return 1 + addieren(a - 1, b);
030                    }
031            }
032            
033            /**
034             * Mulitpliziert a und b und gibt das Produkt zurück.
035             * Der Zeitaufwand ist O(a*b).
036             * 
037             * @param a eine Zahl grösser gleich 0
038             * @param b eine Zahl grösser gleich 0
039             */
040            public int multiplizieren(int a, int b) {
041                    if (a == 0 || b == 0) {
042                            return 0;
043                    } else {
044                            return addieren(a, multiplizieren(a, b - 1));
045                    }
046            }
047    }