算法設計與分析: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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM