今アルゴリズムの勉強をしていてkupc(2012:practice)のサイトにあったアッカーマン関数の問題を見てプログラムを作りました。 下記が出来上がったものです。(m,n)=(2,3)であれば出力できましたが、入力例の2としてあった(3,45)はjava.lang.StackOverflowErrorとなりました。 bigintegerや例外処理できないか考えていますがここから進めないので何か方法があれば教えてほしいです。 import java.util.Scanner; public class AckermannExec { public static void main(String[] args) { Scanner scan=new Scanner(System.in); System.out.print("[m]>"); long m=scan.nextInt(); System.out.print("[n]>"); long n=scan.nextInt(); long a=Ackermann(m,n); System.out.println("A(m,n)="+a); } public static long Ackermann(long m,long n){ if(m>=1&&n>=1){ return Ackermann(m-1,Ackermann(m,n-1)); }else if(n==0){ return Ackermann(m-1,1); }else{ return n+1; } } } よろしくお願いします。
↧