黑马程序员技术交流社区
标题:
递归中的一点小问题,纠结了
[打印本页]
作者:
谢波
时间:
2013-2-5 22:17
标题:
递归中的一点小问题,纠结了
本帖最后由 谢波 于 2013-2-21 13:06 编辑
public class Exercise1 {
public static void main(String[] args)throws Exception {
// TODO Auto-generated method stub
System.out.println(getSum(10));
}
public static int getSum(int x)
{
if(x == 0)
return x;
return x + getSum(x--);
}
}
复制代码
那个 用 x-- 就内存溢出,纠结了,怎么不行呢?
作者:
李跃达
时间:
2013-2-5 22:39
package com.itheima;
public class Test9 {
public static void main(String[] args)throws Exception {
// TODO Auto-generated method stub
System.out.println(getSum(10));
}
public static int getSum(int x)
{
if(x == 0)
return x;
return x + getSum(x-1);//把这里改了,就可以了
}
}
复制代码
写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