ackermann.java 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import java.util.Scanner;
  2. import java.util.Date;
  3. import java.util.Calendar;
  4. public class ackermann {
  5. static int calls = 0;
  6. public static long calcAckermann(long n, long m, Calendar calendar,
  7. Date date, long timediff) {
  8. calls = calls++;
  9. Calendar newCalendar = Calendar.getInstance();
  10. Date NewTime = newCalendar.getTime();
  11. String milis, seconds, timeString = Long.toString(timediff);
  12. if (timediff > 999) {
  13. seconds = timeString.substring(0, timeString.length()-3);
  14. milis = timeString.substring(timeString.length()-3);
  15. } else {
  16. seconds = "0";
  17. milis = timeString;
  18. }
  19. System.out.println("Aufruf " + calls + " mit: n = " + n + " , m = " + m +
  20. ", timediff: " + seconds + "." + milis + " s");
  21. if (n == 0)
  22. return m + 1;
  23. else if (m == 0)
  24. return calcAckermann(n-1, 1, calendar, date, NewTime.getTime() -
  25. date.getTime());
  26. else
  27. return calcAckermann(n-1, calcAckermann(n, m-1, calendar,
  28. date, NewTime.getTime() -
  29. date.getTime()),
  30. calendar, date, NewTime.getTime() -
  31. date.getTime());
  32. }
  33. public static void main(String[] args) {
  34. long n = 0, m = 0;
  35. try {
  36. Scanner scanner = new Scanner(System.in);
  37. System.out.printf("n (long) >>> ");
  38. n = scanner.nextLong();
  39. System.out.printf("n (long) >>> ");
  40. m = scanner.nextLong();
  41. scanner.close();
  42. } catch (java.util.InputMismatchException e) {
  43. System.out.println("Error: Please enter a long.");
  44. System.exit(1);
  45. }
  46. Calendar calendar = Calendar.getInstance();
  47. Date initDate = calendar.getTime();
  48. System.out.println(initDate.getTime());
  49. long result = calcAckermann(n, m, calendar, initDate, 0);
  50. System.out.println("=> " + result);
  51. }
  52. }