java一道题
- Java code
public class panduan { public static void main(String[] e) { panduan p= new panduan(5); } public panduan(int num) { if(num>3) { panduan p=new panduan(--num); } System.out.println(num); } }问下为啥,输出的是 3/3/4 ?????
给我说下运行的 流程!! 用文字解释下,谢谢先~~~
[解决办法]
就是递归构造而已:
当new panduan(5);的时候会调用panduan的构造函数,但是由于5>3满足条件,所有又会调用new panduan(--num);即new panduan(4);同理知道new panduan(3);的时候才会继续向下,从而开始往下继续。打印出
3,再继续new panduan(4)的由于--num所有这个时候num已经是3了,同理new panduan(5);
[解决办法]
就是简单的递归
panduan p= new panduan(5); // --A
会执行
if(num>3)
{
panduan p=new panduan(--num); //此处就是递归 --B
}
num=5,则--num就是4(执行完--以后num也变为4),所以就是调用 new panduan(4)
继续执行
if(num>3)
{
panduan p=new panduan(--num); //此处继续递归 --C
}
num=4,则--num就是3(执行完--以后num也变为3),所以就是调用 new panduan(3)
此时num=3,if (num>3)不再成立,则执行System.out.println(num); 打印出3,
然后递归结束,回到C处,然后继续C处后面的代码,执行System.out.println(num);而num此时是3,所以打印出3
然后B递归结束,回到B处,继续执行B处以后的代码,执行System.out.println(num);而num此时是4,所以打印出4
然后B结束,回到A,此时A后也没什么代码了,所以main方法结束
所以,最后打印就是 3 3 4
[解决办法]
顶楼上,详解。
[解决办法]