import java.util.Scanner;

public class ComputeFactorialTailRecursion {
  /** Zwraca silnię podanej liczby */
  public static long factorial(int n) {
    return factorial(n, 1); // Wywołanie metody pomocniczej
  }
    
  /** Pomocnicza rekurencyjna ogonowo metoda do obliczania silni */
  private static long factorial(int n, int result) {
    if (n == 0) 
      return result;
    else
      return factorial(n - 1, n * result); // Wywołanie rekurencyjne
  }
  
  public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.print("Wpisz nieujemną liczbę całkowitą: ");
    int n = input.nextInt();
    
    // Wyświetlanie silni
    System.out.println("Silnia liczby " + n + " wynosi " + factorial(n));
  }
}
