2011-04-09 91 views

回答

2

这里是一个可能的实现:

import java.util.ArrayList; 

public class LinearAckermann { 

    static ArrayList<Long> mList = new ArrayList<Long>(); 

    public static long ackermann(long m, long n) { 
     while (true) { 
      if (m == 0) { 
       n += 1; 
       if (mList.isEmpty()) { 
        return n; 
       } else { 
        int index = mList.size() - 1; 
        m = mList.get(index); 
        mList.remove(index); 
       } 
      } else if (n == 0) { 
       m -= 1; 
       n = 1; 
      } else { 
       mList.add(m - 1); 
       n -= 1; 
      } 
     } 
    } 

    public static void main(String[] args) { 
     System.out.println(ackermann(4, 1)); 
    } 
} 

它采用mList,而不是一个堆栈持有待审批工作;当堆栈变空时,它可以返回累计值。

+0

_this_应该做什么,它如何增加接受的答案? – greybeard 2015-06-25 06:26:07

+1

这是Ackermann函数的非递归实现,检查结果并看到它确实给出了相同的结果。除了这个答案我不明白你会期望什么。 – ungalcrys 2015-06-25 09:38:10

+0

令人惊讶的是,我们想出了几乎完全相同的代码 - 只有两种不同的语言。 – 2016-01-15 15:13:29