import java.util.Scanner; public class Recursion { // Recursion = Rueckbezueglichkeit: Eine Funktion // definiert sich selbst. // Beispiel: Fakultaet n! = n * (n - 1)!, 0! = 1 // Fibonacci: fib(n+2) = fib(n+1) + fib(n), fib(0) = 0, fib(1) = 1 // Mathematische Aufgabe: Welchen Wert hat fib(-1) bzw. allgemein fib(-n)? // Hint: fib(n+2) = fib(n+1) + fib(n). Angenommen n = -1 ... // Mit letzterem werdet ihr in Mathe 2 noch viel // Freude haben :-) // Gibts auch in der Informatik public static int facRec(int n) { if(n > 0) return n * facRec(n - 1); else return 1; } public static int fibRec(int n) { if(n > 1) return fibRec(n - 1) + fibRec(n - 2); else return n; // nicht korrent wenn n < 0 } // Geht beides auch mit Schleifen public static int fac(int n) { int j = 1; // 0! for(int i = 1; i <= n; i++) { j *= i; // i! } return j; // n! } public static int fib(int n) { int[] fib = new int[n + 1]; fib[0] = 0; fib[1] = 1; for(int i = 2; i <= n; i++) { fib[i] = fib[i - 1] + fib[i - 2]; } return fib[n]; } // Aufgabe: fib ohne Array? // Welche Variante ist besser? Rekursiv oder Iterativ? // Warum ist die iterative Variante besser? public static void main(String... args) { Scanner sc = new Scanner(System.in); int i = sc.nextInt(); System.out.printf("FacRec = %d, Fac = %d, FibRec = %d, Fib = %d", facRec(i), fac(i), fibRec(i), fib(i)); } }