求解ackermann函数
{n+1; m=0,n>0
A(m,n)= {A(m-1,1); n=0,m>0
{A(m-1,A(m,n-1)) n>0,m>0
求救动态规划算法!
最简单的方法,用动态规划的备忘录法
即使用一个二维数祖A[1..m,1..n]记录所有的ackermann函数值
初始的时候全部填充-1,表示尚未计算过
然后直接用递归函数计算ackermann函数
在递归计算之前,现判断数组A中该函数值是否以被计算过,如果计算过了则直接从数组A中取出结果,不要再做重复计算;如果没有计算过,则递归计算。
大致的算法过程如下:
Ackermann(m, n)
1. if A[m,n] >= 0
2. then return A[m, n];
3. else if m = 0 and n > 0
4. then A[m,n] <- n + 1;
5. else if n = 0 and m > 0
6. then A[m,n] <- Ackermann(m-1, 1);
7. else if n > 0 and m > 0
8. then A[m,n] <- Ackermann(m-1, Ackermann(m, n-1));
9. return A[m, n];
当m>0,n=0时,A(m,n)=A(m-1,1)
当m>0,n>0时,A(m,n)=A(m-1,A(m,n-1))