/***************************************************************/
/* Prof. Dr. Carsten Vogt                                      */
/* FH Koeln, Fak. 07 / Nachrichtentechnik                      */
/* http://www.nt.fh-koeln.de/vogt                              */
/*                                                             */
/* Das Programm berechnet mit Hilfe einer rekursiven Funktion  */
/* die Fakultaet n! einer natuerlichen Zahl n.                 */
/***************************************************************/

import java.io.*;

public class Fakultaet {

 // rekursive Funktion zur Berechnung der Fakultaet (nicht optimiert)

 public static long fakul(int n) {

  // Fehlermeldung, wenn n<0

  if (n<0) return -1;

  // eigentliche Fakultaetsberechnung  

  long hilf=0;
  if (n<=1) hilf = 1;               // 0! = 1! = 1
  if (n>1)  hilf = n * fakul(n-1);  // n! = n*(n-1)! für n>1
  return hilf;

 }

 // optimierte Fassung der Fakultaetsfunktion

 public static long fakulOpt(int n) {

  if (n<0) return -1;  // Fehlermeldung

  if (n<=1) return 1;
   else return n*fakulOpt(n-1);

 }

 // Hauptprogramm

 public static void main(String args[]) throws IOException {

  BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

  int ganzzahl; // Variable, deren Fakultaetswert berechnet werden soll

  System.out.println();
  System.out.println("Bitte positive ganze Zahl n eingeben: ");
  System.out.println();

  ganzzahl = Integer.parseInt(in.readLine());

  System.out.println();
  System.out.println(ganzzahl + "! = " + fakul(ganzzahl));

 }

}

