我如何解决这个问题??我认为这与返回声明有关 import java.util.Scanner; 公共剧场广场 { 公共静态void main(字符串参数[]) { 扫描仪输入=新扫描仪(系统输入); 长m=in.nextLong(),n=in.nextLong(),s=in.nextLong(); 剧院广场ob=新剧院广场(); 长x=ob.cal(m,s),y=ob.cal(n,s); 系统输出打印ln(x*y); } 长cal(长a、长b) { if(a

我如何解决这个问题??我认为这与返回声明有关 import java.util.Scanner; 公共剧场广场 { 公共静态void main(字符串参数[]) { 扫描仪输入=新扫描仪(系统输入); 长m=in.nextLong(),n=in.nextLong(),s=in.nextLong(); 剧院广场ob=新剧院广场(); 长x=ob.cal(m,s),y=ob.cal(n,s); 系统输出打印ln(x*y); } 长cal(长a、长b) { if(a,java,Java,我认为你可以不用递归和for循环来解决这个问题 import java.util.Scanner; public class theatre_square { public static void main(String args[]) { Scanner in = new Scanner(System.in); long m = in.nextLong(), n = in.nextLong(), s = in.nextLong();

我认为你可以不用递归和for循环来解决这个问题

import java.util.Scanner;
public class theatre_square
{
    public static void main(String args[])
    {
        Scanner in = new Scanner(System.in);
        long m = in.nextLong(), n = in.nextLong(), s = in.nextLong();
        theatre_square ob = new theatre_square();
        long x = ob.cal(m,s), y = ob.cal(n,s);
        System.out.println(x*y);
    }
    long cal(long a, long b)
    {
        if(a<=0)
            return(0);
        else
            return (1+cal(a-b,b));
    }
}

你正在用
b==1
调用你的mathod
cal
。这意味着,你建立了一个10亿(!)的递归堆栈递归方法调用。这对于普通堆栈来说可能太大了。@Seelenvirtuose是对的。您调用了100000000次递归函数。答案是:您必须了解自己在做什么。每次方法调用都会在堆栈上分配内存,直到方法返回为止。嵌套方法调用太多,您就会运行内存不足。所以这里的错误是你认为你的代码应该正常工作。@GhostCat好的。那么我就用for循环。谢谢你的帮助。这回答了你的问题吗?
import java.util.Scanner;
public class theatre_square
{
    public static void main(String args[])
    {
        Scanner in = new Scanner(System.in);
        long m = in.nextLong(), n = in.nextLong(), s = in.nextLong();
        theatre_square ob = new theatre_square();
        long x = ob.cal(m,s), y = ob.cal(n,s);
        System.out.println(x*y);
    }
    
    
    long cal(long m, long a)    {
        long count = m / a;
        long rem = m % a;
        if(rem  > 0){
            count++;
        }
        return count;
    }
}