黑马程序员技术交流社区

标题: 递归中的一点小问题,纠结了 [打印本页]

作者: 谢波    时间: 2013-2-5 22:17
标题: 递归中的一点小问题,纠结了
本帖最后由 谢波 于 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-- 就内存溢出,纠结了,怎么不行呢?
作者: 李跃达    时间: 2013-2-5 22:39
  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,同样可以解决问题
作者: 刘凯    时间: 2013-2-5 22:48
x-- 是先调用x的值 再自身-1  楼主return x + getSum(x--); 只能是又一次调用了getSum(10);   这样就成了无限循环,进而内存溢出。。  应改为 --x
作者: 谢波    时间: 2013-2-6 00:39
哦  懂了  谢谢各位  
作者: 杨芳    时间: 2013-2-6 01:16
顶!!!
作者: 朱玉玺    时间: 2013-2-7 22:45
你的x一直等于10,不溢出才怪,x--应该改成--x;
作者: 李大强    时间: 2013-2-8 18:02
这是你不小心而已,getSum(x-1)方法此时传进来的x的值还等于10,----------如此以来你就相当于不停的调用getSum(x-1)方法,并把10传递进来,x的值永远都不会为零,所以当然“内存溢出”了!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2