/** A class of static recursive mathematical functions. */ public class MathRecursion { /** Yields: n! */ public static int factorial(int n) { System.out.println("Start factorial. n = "+n); if (n==0) { // Base case System.out.println("Base case"); return 1; } // Recursive case. int result = n*factorial(n-1); System.out.println("End factorial. n = "+n); return result; } /** Yields: the nth Fibonacci number a_n = a_{n-1}+a_{n-2}*/ public static int fibonacci(int n) { System.out.println("Start fibonacci. n = "+n); if (n==0 || n==1) { // Base cases System.out.println("Base case"); return 1; } // Recursive case. int result = fibonacci(n-1)+fibonacci(n-2); System.out.println("End fibonacci. n = "+n); return result; } }