001    package de.hska.java.aufgaben.suchen;
002    
003    /**
004     * Zur Berechnung der Potenz <code>a<sup>n</sup></code>
005     * für natürliche Zahlen <code>n</code> und
006     * Gleitkommawerte <code>a</code>.
007     * 
008     * <p>
009     *   <a href="http://www.home.hs-karlsruhe.de/~pach0003/informatik_1/aufgaben/suchen.html#potenz">Zurück zum Aufgabentext</a>
010     * </p>
011     * 
012     * 
013     * @author Christian Pape
014     *
015     */
016    public class Potenzfunktion {
017    
018            /**
019             * Gibt <code>a<sup>n</sup></code> zurück.
020             * Die Laufzeit ist <code>O(log<sub>2</sub>n)</code>.
021             * Rekusive Variante.
022             * 
023             * @param a die zu potenzierende Zahl
024             * @param n eine ganze Zahl grösser gleich 0
025             */
026            public double getPotenz(double a, int n) {
027                    if (n == 0) {
028                            return 1.0;
029                    } else {
030                            double potenz = getPotenz(a, n / 2);
031                            
032                            if (n % 2 == 0) {
033                                    return potenz * potenz;
034                            } else {
035                                    return a * potenz * potenz;
036                            }
037                    }
038            }
039            
040    
041    }