递归思想的由来

方法A{
方法B();
其它代码
}
方法B{
方法C();
其它代码
}
方法C{
  方法D();
其它代码  
}
方法D{
其它代码
}

方法A中调用方法B,A中的其它代码需要等待A中B方法调用完成才开始。

同理,直到调用到方法D停止调用其它方法,完成后回到方法C里面完成其它代码,再回到方法B里面完成其它代码,再回到方法A里面完成其它代码。

这样一种调用思想就是递归。

示例:

//递归的思想,方法内调方法本身,在方法未执行完成处于等待期间,直到判断到最后一次不再调用自己,开始释放空间
    private void build(int floor){
        //第一步,判断,调用
        if(floor>1){
            this.build(floor-1);
        }
        //第二步,自己执行
        System.out.println("第:"+floor+"");
    }
    /**
     * 方法在执行时会在栈内存中开辟临时空间,每调用一次开辟一块内存空间,等完全执行完毕后释放空间。
     * 1.判断5>1,调用 。第二步等待第一步完成后才开始调--->产生第一个零时内存空间
     * 2.判断4>1,调用,第二步等待第一步完成后才开始调--->产生第二个临时内存空间
     * 3.判断3>1,调用。第二步等待第一步完成后才开始调--->产生第三个临时内存空间
     * 4.判断2>1,调用,第二步等待第一步完成后才开始调--->产生第四个临时内存空间
     * 5.判断1>1,不调。第二步开始调用--->产生第5个临时内存空间
     * 6.此时floor==1开始打印第一层,释放第5次产生的内存>>第:1层
     * 7.此时floor==2开始打印第二层,释放第4次产生的内存>>第:2层
     * 8.此时floor==3开始打印第三层,释放第3次产生的内存>>第:3层
     * 9。此时floor==4开始打印第三层,释放第2次产生的内存>>第:4层
     * 10.此时floor==5开始打印第三层,释放第1次产生的内存>>第:5层
     */
原文地址:https://www.cnblogs.com/hebiao/p/12882827.html