首页 > 编程语言 > 详细

算法设计与分析:Ackerman函数的递归算法

时间:2020-05-11 14:30:14      阅读:43      评论:0      收藏:0      [点我收藏+]
  • 技术分享图片
  • 技术分享图片
  • 代码实现

  •  1 package cn.htu.test;
     2 /**
     3  * 这里的ackerman(n,m)就是题目当中的A(n,m)
     4  * 这里的比较关键的思想就是当m=1时,A(1,1)=2,A(n,1)=A(n-1,1)+2
     5  * 所以当m=1的时候A(n,1)是函数"乘2"
     6  * 当m=2也可以对导出来,当m=3也可以推导出来,但是以及是数学表达式的极限了,幂上幂上幂......
     7  * 详细的看一下上面的题目分析吧,当m=4的时候增长的太快以至于实验的时候stack溢出
     8  * 
     9  */
    10 import java.util.Scanner;
    11 public class Ackerman
    12 {
    13     public static void main(String args[]){
    14         try
    15         {   
    16             System.out.println("n:");
    17             Scanner scanner=new Scanner(System.in);
    18             int n=scanner.nextInt();
    19             System.out.println("m:");
    20             int m=scanner.nextInt();
    21             System.out.println(ackerman(n,m));//执行A函数,并返回函数结果
    22         }
    23         catch (Exception e)
    24         {
    25         }   
    26     }
    27     
    28 
    29     //照着表达式敲就对了,所以递归和分治的算法核心就是要找到表达式
    30     public static int ackerman(int n,int m){
    31         if (n==1&&m==0)
    32         {
    33             return 2;
    34         }else if (n==0&&m>=0)//这里要注意后面的表达式的取值范围也是在代码里和式子有着等价值的地位,要放在一块
    35         {
    36             return 1;
    37         }else if (n>=2&&m==0)
    38         {
    39             return n+2;
    40         }else {
    41             return Ackerman.ackerman(Ackerman.ackerman(n-1,m),m-1);
    42         }
    43     }
    44 }

     

  • 参考链接
  • https://blog.csdn.net/aotumemedazhao1996/article/details/70460259

算法设计与分析:Ackerman函数的递归算法

原文:https://www.cnblogs.com/shallow920/p/12868875.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!