关于HyperOperation的问题

时间:2010-05-29 14:45:51

标签: algorithm

我正在尝试解决以下重复计划。

http://en.wikipedia.org/wiki/Hyper_operator

这是我的代码。我知道它有错误,但我已尽我所能。

public class hyper {
    public static int Hyper(int a, int b, int n) {
        int t=0;
        if (n == 0)
            return b+1;

        if ((n == 1) && (b == 0))
            return a;

        if ((n == 2) && (b == 0))
            return 0;

        if ((n >= 3) && (b == 0))
            return 1;

        t = Hyper(a, b-1, n);

        return Hyper(a, t, n-1);
    }


    public static void main(String[] args) {
        int n=3;
        int a=5;
        int b=7;
        System.out.println(Hyper(a, b, n));
    }
}

1 个答案:

答案 0 :(得分:2)

这是Wikipedia definition

的直接翻译

alt text

public static long hyper(long n, long a, long b) {
    return
        (n == 0) ? b + 1 :
        (n == 1 && b == 0) ? a :
        (n == 2 && b == 0) ? 0 :
        (n >= 3 && b == 0) ? 1 :
        hyper(n-1, a, hyper(n, a, b-1));
}

示例输出:

    System.out.println(hyper(0,2,3)); // prints "4" increment
    System.out.println(hyper(1,2,3)); // prints "5" addition
    System.out.println(hyper(2,2,3)); // prints "6" multiplication
    System.out.println(hyper(3,2,3)); // prints "8" exponentiation
    System.out.println(hyper(4,2,3)); // prints "16" tetration
    System.out.println(hyper(5,2,3)); // throws StackOverflowError; too deep