ackermann.c 649 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. #include <stdio.h>
  2. // Ackermann function
  3. unsigned long
  4. ackermann(unsigned long m, unsigned long n)
  5. {
  6. if (m == 0) {
  7. return n + 1;
  8. }
  9. else if (n == 0) {
  10. return ackermann(m - 1, 1);
  11. }
  12. else {
  13. return ackermann(m - 1, ackermann(m, n - 1));
  14. }
  15. }
  16. __attribute__((export_name("run"))) int
  17. run(int m, int n)
  18. {
  19. int result = ackermann(m, n);
  20. printf("ackermann(%d, %d)=%d\n", m, n, result);
  21. return result;
  22. }
  23. int
  24. main()
  25. {
  26. unsigned long m, n, result;
  27. // Example usage:
  28. m = 3;
  29. n = 2;
  30. result = ackermann(m, n);
  31. printf("Ackermann(%lu, %lu) = %lu\n", m, n, result);
  32. return 0;
  33. }