关于递归连续两次调用的小结

关于递归连续两次调用的小结

递归定义

递归简单的来说可以理解为函数自己直接调用自己,或者间接调用。
递归调用的时候。要找到递归的规律结束的条件出口
通常递归一次调用比较好理解。但是一般超过一次后,就比较难理解,比较抽象。

 public void f(int count) {
        if (count >0) {
            return;
        }
        count--;
        System.out.println(count);
        f(count);  //函数1
        f(count);  //函数2
    }
}

如上述代码块所示,f函数体里面,出现连续两次f()函数。
比如当count赋值为3,即count=3,则为f(3)
进入函数体内,count–,则count=2,输出2,下一步接下来进入函数1,即f(2),又一次进入函数体,count–;count=1,输出1,又到下一步进入函数1,f(1),又一次进入函数体,这个时候count–,count=0,输出0,然后再一次进入函数1,count=0; 进入判断体,返回出来,所以从函数1里面出来,到函数2里面,注意此时的count为函数1里面依次输出的值0,满足if判断进入返回体,则也退出,然后接着count取1,即为f(1),进入函数体,然后count–,即count=0,输出0, 接着取count=2,函数2为f(2),进入函数体,count–,输出1,下一步进入函数1,即f(1),再次进入函数体,count–,count=0;输出0注意,此时count从0开始赋值,进入函数体,进入if判断里,返回出函数,然后是count=1;进入函数2的f(1),进入函数体,count–,输出0

所以依次输出顺序为:
2
1
0
0
1
0
0

递归函数的运行其实就是前进和退回,在退回阶段,位于栈顶的局部变量,参数值和返回地址都被弹出。


版权声明:本文为Colak_Huang原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。