금산 운필 시험문제: AKM 함수

5510 단어

1. 제목 설명

/**
 (Ackmann) 

【 】
 (Ackmann) A(m,n) ,m,n (m<=3,n<=10), :
akm(m,n) = n+1;         (m=0 )
akm(m,n) = akm(m-1,1);  (m>0,n=0 )
akm(m,n) = akm(m-1,akm(m, n-1)); (m,n>0 )

【 】 m n。

【 】 。

【 】2 3
【 】9
*/

귀속과 비귀속 알고리즘을 작성하고 호출 과정을 출력합니다.
 

2. 코드는 귀속과 비귀속을 실현한다

import java.util.Stack;
 
public class Main2 {
    public static void main( String[] args ) {
        System.out.println(AkmRecur(2, 3));
        System.out.println(AkmNonRecur(2, 3));
    }
    // 
    public static int AkmRecur(int m, int n)    {
        if (m == 0)
            return n + 1;
        else if (n == 0)
            return AkmRecur(m - 1, 1);
        else
            return AkmRecur(m - 1, AkmRecur(m, n - 1));
    }
    // 
    public static int AkmNonRecur(int m, int n)    {
        Stack sx = new Stack();
        Stack sy = new Stack();
        int x = 0;
        int y = 0;
        sx.push(m);
        sy.push(n);
        while ((!sx.empty()) && (!sy.empty())) {
             if (sx.peek() != 0 && sy.peek() == 0) {// m!=0 n==0
                     x = sx.peek();
                     y = sy.peek();
                     sx.pop();
                     sy.pop();
                     sx.push(x-1);
                     sy.push(1);
             }else if (sx.peek() != 0 && sy.peek() != 0) {// m!=0 n!=0
                     while (sx.peek()!= 0 &&sy.peek()!= 0) {
                         x = sx.peek();
                         y = sy.peek()-1;
                         sx.pop();
                         sy.pop();
                         sx.push(x-1);
                         sy.push(-1);// m!=0&&n!=0, n -1, 
                         sx.push(x);
                         sy.push(y);
                     }
             } else {// m==0
                 y = sy.peek();
                 sx.pop();
                 if (sx.empty()){
                     return y + 1;
                 } else {
                     sy.pop();//  y
                     sy.pop();// -1
                     sy.push(y+1);
                 }
             }
        }
        return -1;
    }
}

 
다음으로 전송:https://www.cnblogs.com/haimishasha/p/11610405.html

좋은 웹페이지 즐겨찾기