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 }