zoukankan      html  css  js  c++  java
  • 算法设计与分析:Ackerman函数的递归算法

    • 代码实现

    •  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
  • 相关阅读:
    Java学习的第二十八天
    Java学习的第二十七天
    第五章 作用域闭包
    第4章提升
    第3章函数作用域和块级作用域
    Vant中List列表下拉加载更多
    获取当前时间
    js比较两个时间的大小
    边框引起页面抖动
    计算两个数的百分比,保留两位小数
  • 原文地址:https://www.cnblogs.com/shallow920/p/12868875.html
Copyright © 2011-2022 走看看