黑马程序员技术交流社区
标题:
关于递归
[打印本页]
作者:
正在输入...
时间:
2015-3-1 21:53
标题:
关于递归
构造函数为什么不能递归呢?
在网上也找不到好的解释。
public class DiGuiTest{
public static void main(String[] args) {
//创建person对象;
Person p = new Person();
}
}
复制代码
直接调用会报错,提示创建一个方法
public class Person {
Person(){
int i = 1;
System.out.println("递归调用"+i);
i++;
Person();//此处提示创建一个Person函数, 创建出来是void Person();
}
}
复制代码
是不是只建一个方法,然后创建对象。 再在对象构造中调用该方法。
作者:
㏒假™面具
时间:
2015-3-1 22:26
本帖最后由 ㏒假™面具 于 2015-3-1 22:27 编辑
递归使用时有两个注意事项:1.一定要明确条件,来控制递归的次数,否则会导致内存溢出 2.递归次数太多也会导致内存溢出。你在构造函数中。调用构造函数没有明确条件。
作者:
习惯就好
时间:
2015-3-1 22:38
首先构造函数是给对象初始化的,而递归是函数自身调用自身由未知到已知,并且需要给定条件来结束递归,否则会死循环直到内存溢出。
其次你将构造函数定义成递归的形式,当创建对象时就会在堆内存中不断的开辟空间,而一个对象只对应一个内存地址,这种情况下就矛盾了,就会出错。
以上是我个人的分析,不知道对不对!
作者:
仰天长啸
时间:
2015-3-2 00:09
因为构造函数没法设置出口,设置不了出口,内存就会溢出,因此构造方法不能使用递归
作者:
仰天长啸
时间:
2015-3-2 00:18
你看看你写的递归代码,是不是没有出口,这样会一直递归下去的,然后就死机了
作者:
alvis2015
时间:
2015-3-2 10:03
你可以这样理解
1、构造函数本身不是函数,函数必须有返回值,构造函数没有返回值
2、构造函数的作用是在堆内存中开辟出一段空间,以存放对象各属性的值;
而普通函数的作用是为执行一段代码并返回结果。
3、我的理解就是,你不要把构造函数当作函数看待,它本身就不是函数,只是像函数;你可以叫它构造体。constructor 和 function,从英语上理解。
作者:
邓士林
时间:
2015-3-2 10:25
学习了,各位的解释
作者:
sofeel
时间:
2015-3-2 12:31
构造函数只能被new关键字调用。构造函数有返回值吗?没有。每次递归需要返回值吗?需要。
作者:
几米丶
时间:
2015-3-2 12:50
写的很好啊
作者:
自学小番薯
时间:
2015-3-2 19:53
进来学习学习
作者:
yangruijing
时间:
2015-3-2 21:02
Person(){
int i = 1;
System.out.println("递归调用"+i);
i++;
Person();//此处提示创建一个Person函数, 创建出来是void Person();
}
此时编译不通过。
Person构造方法中调用的Person();此时Person()方法代表的不是构造方法,而是Person类中的自定义的方法,例如:public void Person(){}.
如果构造方法中向调用例外的构造方法,可以使用this关键字。
public class Person {
public Person() {
this(1);
}
public Person(int age) {
}
}
递归算法是一种直接或者间接地调用自身的算法(除构造方法)。所以这不是递归。
作者:
无辜被杀害
时间:
2015-3-2 21:11
你这个递归没写出口吧= =
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2