算法 — 阿克曼(Ackmann)函数

  • Post author:
  • Post category:其他



1.定义

阿克曼函数(Ackermann)是非原始递归函数的例子。它需要两个自然数作为输入值,输出一个自然数。它的输出值增长速度非常高,仅是对于(4,3)的输出已大得不能准确计算。

​Ackermann函数定义如下:

若m=0,返回n+1。

若m>0且n=0,返回Ackermann(m-1,1)。

若m>0且n>0,返回Ackermann(m-1,Ackermann(m,n-1))。


2.Java源码

public class Test {
public static void main(String[] args) throws Exception {
       Scanner scanner = new Scanner(System.in);
       int m = scanner.nextInt();
       int n = scanner.nextInt();
       if (m >= 0 && n >= 0) {
           System.out.println(ackmann(m,n));
       }
    }

    private static int ackmann (int m, int n) {
       if (m == 0) return n+1;
       if (m > 0 && n == 0) return ackmann(m-1,1);
       return ackmann(m-1,ackmann(m,n-1));
    }
}

输入: 2 3
结果: 9



版权声明:本文为zhangting19921121原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。