日期:2014-05-20  浏览次数:20639 次

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


------解决方案--------------------
顶楼上,详解。
------解决方案--------------------
探讨

就是简单的递归
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……