Ackermann函数的动态规划算法

 

我服了,想了半天都没有想出来怎么实现这个算法,最要命的是网上下了个程序自己又看不懂!!!!!!难道是老了?

/*
 * Ackermann函数可以递归地定义如下:
 *             n+1            m=0
 *     A(m,n)={A(m-1,1)       m>0,n=0
 *             A(m-1,A(m,n-1))m>0,n>0
 * 试设计一个计算A(m,n)的动态规划算法,该算法只占用O(m)空间。(提示:用两个
 * 数组val[0:m],ind[0:m],使得对任何i有val[i]=A(i,ind[i]))
 */         
package dynamic_progranmming;

public class Ackermann {

 public Ackermann() {
  // TODO Auto-generated constructor stub
 }
    public static int ack(int m,int n)
    {
     int i,val[],ind[],k=0;
     if(m==0)
     {
      return n+1;
     }
     val=new int[m+1];
     ind=new int[m+1];
     for(i=0;i<=m;i++)
     {
      val[i]=-1;
      ind[i]=-2;
     }
     val[0]=1;
     ind[0]=0;
     while(ind[m]<n)
     {
      val[0]++;
      ind[0]++;
      for(i=0;i<m;i++)
      {
       if(ind[i]==1&&ind[i+1]<0)
       {
        val[i+1]=val[0];
        ind[i+1]=0;
       }
       if(val[i+1]==ind[i])
       {
        val[i+1]=val[0];
        ind[i+1]++;
       }
       System.out.println(k++);
      }
     }
     return val[m];
    }
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
        System.out.println(ack(4,5));
 }

}

    原文作者:动态规划
    原文地址: https://blog.csdn.net/fangxia722/article/details/3051214
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞