2つの自然数n,mの最小公倍数を求めるプログラムを作りたいのですが、これまたコンパイルまではできたのに実行結果で"java.lang.StaticOverflowError"が出てしまいました。
このエラーについて調べたところ、スタック・サイズを増やすだの、ほとんど起こらない問題だのとプログラミング初心者にはキャパオーバーな事柄ばかりで困っています。
ですが、アプリケーションの問題ではなく、根本的にプログラムのどこかが間違っているんだと私は思っています。どなたか解決策を教えていただけないでしょうか。
import java.util.Scanner; public class LCM{ public static int gcd(int n,int m){ int gcd,p; p=1; gcd=1; while((p<=n)&&(p<=m)){ if((n%p==0)&&(m%p==0)){ gcd=p; } p=p+1; } return gcd; } public static int lcm(int n,int m){ int lcm,gcd; gcd=gcd(n,m); lcm=1; lcm=n*m/gcd(n,m); return lcm(n,m); } public static void main(String[] args){ int n,m; Scanner sc=new Scanner(System.in); System.out.println("自然数nを入力してください"); n=sc.nextInt(); System.out.println("自然数mを入力してください"); m=sc.nextInt(); int lcm=lcm(n,m); System.out.println(n+"と"+n+"の最小公倍数は"+lcm(n,m)); } }
実行結果
自然数nを入力してください
4
自然数mを入力してください
6
Exception in thread "main" java.lang.StackOverflowError
at LCM.lcm(LCM.java:18)
at LCM.lcm(LCM.java:23)
at LCM.lcm(LCM.java:23)
at LCM.lcm(LCM.java:23)(以下省略)
よろしくお願いします。
回答4件
あなたの回答
tips
プレビュー