package UE08_051124_Rekursion1;

public class UE08_Rekursion {
    public static void main(String[] args) {
        printFibonacciFolge(8);
        System.out.println(zaehleSelbstlaute("Hallo du MENSCH"));
        System.out.println(zahlHoch(2, 5));
        System.out.println(zahlHoch(2, 10));
        System.out.println(zahlHoch(1, 1));
        System.out.println(zahlHoch(1, 10));
        System.out.println(zahlHoch(5, 5));
        System.out.println(zahlHoch(20, 3));
        System.out.println(zahlHoch(10, 1));
        System.out.println(zahlHoch(10, 10));
    }

    public static int fibonacci(int n) {
        return n <= 2 ? n <= 0 ? 0 : 1 : fibonacci(n - 1) + fibonacci(n - 2);
    }

    public static void printFibonacciFolge(int anz) {
        for (int i = 1; i <= anz; i++) System.out.print(fibonacci(i) + " ");
    }

    public static int zaehleSelbstlaute(String s) {
//        if (s.isEmpty()) return 0;
//        if ("aeiouAEIOU".indexOf(s.charAt(0)) == -1) return 0;
//        return 1 + zaehleSelbstlaute(s.substring(1));
        return s.isEmpty() ? 0 : (("aeiouAEIOU".indexOf(s.charAt(0)) == -1) ? 0 : 1) + zaehleSelbstlaute(s.substring(1));
    }

    public static long zahlHoch(int x, int n) {
//        if (n <= 1) return x;
//        long z = zahlHoch(x, n >> 1);
//        if ((n & 1) != 0) return x * z * z;
//        return z * z;
        return n <= 1 ? x : ((n & 1) != 0 ? x * zahlHoch(x, n >> 1) * zahlHoch(x, n >> 1) : zahlHoch(x, n >> 1) * zahlHoch(x, n >> 1));
    }
}
