Факторная последовательность в Java

Две мои истории на этой неделе были посвящены экспериментам с рекурсией в Java. Я познакомился с рекурсией, когда программировал на Ruby и написал эту запись в блоге с базовым примером того, как работает рекурсия.

Моя первая история заключалась в том, чтобы написать программу для вычисления факториала заданного числа. Википедия определяет факториал следующим образом:

the factorial of a non-negative integer n, denoted by n!, is the product of all positive integers less than or equal to n.
5! = 5 X 4 X 3 X 2 X 1 = 120.

Я протестировал код, который дал мне основу для начала, и я начал с нуля. Факториал нуля равен единице, что, честно говоря, довольно запутанно. При поиске, почему это так, большая часть Интернета, кажется, говорит «потому что это так». Я считаю, что настоящая причина этого в том, что при выполнении 1! факториал может быть единицей и не равен нулю.

public class FactorialTest {
  @Test
  public void zero() { 
    assertEquals(1, factorial(0));    
  }
}

Для факториала нуля и единицы код был очень простым, мне нужно было вернуть это число.

private int factorial(int i) {
  return 1;
} 

Затем я сделал базовый оператор if для обработки двух:

private int factorial(int i) {
  if (i < 2) {
    return 1;
  } else {            
    return 2        
  }     
}

Когда дело дошло до факториала трех, я был вынужден написать фактическую формулу:

until current number is equal to 1
current number * (current number - one)  

Моей задачей было использовать рекурсию для получения факториала. Это означало, что мне нужно было вызвать тот же метод из моего метода, уменьшив текущее число. Чтобы остановить повторение моего метода, мне нужен был базовый случай, который был:

i <= 1

Мой код для этой формулы выглядел так:

private int factorial(int i) {
  return i <= 1? 1 : i * (factorial(i - 1));
}

Мне нравилось делать эту факториальную программу, так как она делала рекурсию немного менее страшной. Затем я продолжил делать программу Фибоначчи, используя рекурсию. Эта программа немного сложнее, но ее относительно легко сломать.

О моей программе Фибоначчи можно прочитать здесь.