001    package de.hska.java.aufgaben.rekursion;
002    
003    /**
004     * Rekursive und nicht-rekursive Implementierung folgender
005     * Funktion f:
006     * <ul>
007     * <li>f(n) := 1, für n = 1</li>
008     * <li>f(n) := f(n-1) + 2n - 1, für n > 1</li>
009     * </ul>
010     * <p>
011     *   <a href="http://www.home.hs-karlsruhe.de/~pach0003/informatik_1/aufgaben/rekursion.html#rekursive_funktion">Zurück zum Aufgabentext</a>
012     * </p>
013     * 
014     * @author Christian Pape
015     *
016     */
017    public class RekursiveFunktion {
018    
019            /**
020             * Lineare rekursive Implementierung von f.
021             */
022            public int f(int n) {
023                    if (n == 1) {
024                            return 1;
025                    } else {
026                            return f(n-1) + 2 * n -1;
027                    }
028            }
029    
030            /**
031             * Nicht rekursive Implementierung von f.
032             * f berechnet n<sup>2</sup>, denn es gilt:
033             * n<sup>2</sup> = (n-1)<sup>2</sup> + 2n - 1.
034             * Man hätte natürlich auch iterativ f durch
035             * Anwenden von Dynamischen Programmieren berechnen können.
036             */
037            public int f1(int n) {
038                    return n * n;
039            }
040    }