A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 谢波 中级黑马   /  2013-2-5 22:17  /  2001 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 谢波 于 2013-2-21 13:06 编辑

  1. public class Exercise1 {

  2.         public static void main(String[] args)throws Exception {
  3.                 // TODO Auto-generated method stub
  4.                 System.out.println(getSum(10));
  5.         }
  6.         public static int getSum(int x)
  7.         {
  8.                 if(x == 0)
  9.                         return x;
  10.                 return x + getSum(x--);
  11.         }
  12. }
复制代码
那个 用  x-- 就内存溢出,纠结了,怎么不行呢?

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

6 个回复

正序浏览
这是你不小心而已,getSum(x-1)方法此时传进来的x的值还等于10,----------如此以来你就相当于不停的调用getSum(x-1)方法,并把10传递进来,x的值永远都不会为零,所以当然“内存溢出”了!
回复 使用道具 举报
你的x一直等于10,不溢出才怪,x--应该改成--x;
回复 使用道具 举报
杨芳 来自手机 中级黑马 2013-2-6 01:16:03
报纸
顶!!!来自: Android客户端
回复 使用道具 举报
哦  懂了  谢谢各位  
回复 使用道具 举报
x-- 是先调用x的值 再自身-1  楼主return x + getSum(x--); 只能是又一次调用了getSum(10);   这样就成了无限循环,进而内存溢出。。  应改为 --x

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
  1. package com.itheima;
  2. public class Test9 {

  3.         public static void main(String[] args)throws Exception {
  4.                 // TODO Auto-generated method stub
  5.                 System.out.println(getSum(10));
  6.         }
  7.         public static int getSum(int x)
  8.         {
  9.                 if(x == 0)
  10.                         return x;
  11.                 return x + getSum(x-1);//把这里改了,就可以了

  12.         }
  13. }
复制代码
写x--的话造成循环调用,比如第一次实参为10 ,之后return x+getSum(x--)//此处x--==10,等于说还是调用了一次getSum(10);所以永远调用,没有结束的时候,也可以把代码改成--x,同样可以解决问题

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马