public class Test
{
public long fsum(int m)
    {
long sum =0;
                if(m<0)
{
System.out.println("M必须大于零"); }
else if (m==1)
{
    sum =1;
}
else
{
sum= this.fsum(m-1)+m;
}
return sum;     }
public static void main (String [] args)
{
             long start=System.currentTimeMillis(); 
Test test= new Test();
System.out.println(test.fsum(9000));
     long start2=System.currentTimeMillis()-start;
System.out.println(start2);
 
}}
请问针对这种问题,能有什么办法来处理?现在我已经将返回值的类型变为long了,但是任然不够,那应该怎么处理?

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【hl87109881】截止到2008-07-17 13:20:09的历史汇总数据(不包括此帖):
    发帖的总数量:5                        发帖的总分数:140                      每贴平均分数:28                       
    回帖的总数量:7                        得分贴总数量:0                        回帖的得分率:0%                       
    结贴的总数量:0                        结贴的总分数:0                        
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:5                        未结的总分数:140                      
    结贴的百分比:0.00  %               结分的百分比:0.00  %                  
    无满意结贴率:---------------------无满意结分率:---------------------
    如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
      

  2.   

    使用BigDecimal 吧。这个绝对够用。
      

  3.   

    你是stack overflow还是long不够用啊?
    照道理1加到9000不会超出long的范围啊
      

  4.   

    内存溢出,建议用循环,这个要是用递归的话太占内存了,jvm缺少的内存根本不够用
      

  5.   

    其实用递归也可以的,只是楼主递归写得不好,所以溢出了,
    我试了下可以加到1000000都不溢出的(使用jdk默认的栈大小)
      

  6.   

      递归次数太多 栈溢出了。。建议这样试试。。System.out.println(test.fsum(9000));
      

  7.   

      递归次数太多 栈溢出了。。建议这样试试。。System.out.println(test.fsum(10));
      

  8.   


    else if (m==1) 

      sum =1; 
     sum+=1;