开发者

Question on HyperOperation

I am trying to solve the following recurence program.

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

Here is my code. I know it has mista开发者_如何学运维kes, but I have done what I could.

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));
    }
}


This is a straightforward translation of the Wikipedia definition:

Question on HyperOperation

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));
}

Sample output:

    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
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜