From dc3778cfbc9ad9fe4af878ffd9b3a5611e4e03e1 Mon Sep 17 00:00:00 2001 From: 5n0w_wh1t3 <26778292+5n0wwh1t3@users.noreply.github.com> Date: Wed, 17 Jul 2019 13:23:56 -0700 Subject: [PATCH 1/2] Ackermann added. --- src/main/java/com/others/Ackermann.java | 33 +++++++++++++++++++++ src/test/java/com/others/AckermannTest.java | 19 ++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 src/main/java/com/others/Ackermann.java create mode 100644 src/test/java/com/others/AckermannTest.java diff --git a/src/main/java/com/others/Ackermann.java b/src/main/java/com/others/Ackermann.java new file mode 100644 index 000000000000..37a1d71597cc --- /dev/null +++ b/src/main/java/com/others/Ackermann.java @@ -0,0 +1,33 @@ +package src.main.java.com.others; + + +public class Ackermann { + + + /** + * Ackermann function - simplest and earliest-discovered examples of a total computable function + * that is not primitive recursive. + * + * Defined only for NONNEGATIVE integers !!! + * + * Time complexity is super-exponential. O(n(^)) + * + * @param m + * @param n + * @return + * + * + */ + public long Ack(long m, long n) { + + if (m == 0) return n + 1; + + if (n == 0) return Ack(m - 1, 1); + + return Ack(m - 1, Ack(m, n - 1)); + } + + } + + + diff --git a/src/test/java/com/others/AckermannTest.java b/src/test/java/com/others/AckermannTest.java new file mode 100644 index 000000000000..c45b55422b8d --- /dev/null +++ b/src/test/java/com/others/AckermannTest.java @@ -0,0 +1,19 @@ +package src.test.java.com.others; + +import src.main.java.com.others.Ackermann; +import static org.junit.Assert.assertEquals; +import org.junit.Test; + +public class AckermannTest { + + @Test + public void testAckermann() { + Ackermann ackTest = new Ackermann(); + assertEquals("Error", 1, ackTest.Ack(0, 0)); + assertEquals("Error", 3, ackTest.Ack(1, 1)); + assertEquals("Error", 7, ackTest.Ack(2, 2)); + } + + + +} From 3e1fbad6938695def860c4c19ad39bde6e517f75 Mon Sep 17 00:00:00 2001 From: 5n0w_wh1t3 <26778292+5n0wwh1t3@users.noreply.github.com> Date: Wed, 17 Jul 2019 13:27:09 -0700 Subject: [PATCH 2/2] Ackermann updated --- src/main/java/com/others/Ackermann.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/others/Ackermann.java b/src/main/java/com/others/Ackermann.java index 37a1d71597cc..a06cfaa6b8af 100644 --- a/src/main/java/com/others/Ackermann.java +++ b/src/main/java/com/others/Ackermann.java @@ -11,7 +11,7 @@ public class Ackermann { * Defined only for NONNEGATIVE integers !!! * * Time complexity is super-exponential. O(n(^)) - * + * Any input m higher tahn (3,3) will result in StackOverflow * @param m * @param n * @return @@ -20,14 +20,15 @@ public class Ackermann { */ public long Ack(long m, long n) { - if (m == 0) return n + 1; - - if (n == 0) return Ack(m - 1, 1); - + if (m == 0) + return n + 1; + + if (n == 0) + return Ack(m - 1, 1); + return Ack(m - 1, Ack(m, n - 1)); - } - } +}