说起递归函数,我们的第一反应是很绕,一层又一层,看的很晕。在上一篇文章中,实现排列组合算法很多地方用到了递归,这是一种很重要的设计思想,真正掌握它的原理之后就会豁然开朗:噢!原来这么简单!
我们把“递归”拆成两个字去看:
递:进去
归:出来
递归通常伴随着最外层的任务没有完成的情况下,一层又一层的进入到另一件任务当中,直到把最里层的任务完成之后,才一层又一层的返回到最外层,完成最外层的程序。下面开看一个最简单的递归函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
/** * 使用函数来写一个递归,打印:3 2 1 0 0 1 2 3 * @author by vonnwang * @date 2019/08/20 * @param $num int * @return */ function recurrence($num) { echo $num; if ($num>0){ recurrence($num-1); } echo $num; } recurrence(3); |
调用过程:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
//======最外层开始======== function recurrence($num){ echo $num; // 3 if ( $num > 0){ recurrence($num-1); //======第二层开始======== recurrence(2); function recurrence($num){ echo $num; // 2 if ( $num > 1){ recurrence($num-1); //======第三层开始======== recurrence(1) function recurrence($num){ echo $num; // 1 if ( $num > 1){ recurrence($num-1); //======第四层开始======== recurrence(0) function recurrence($num){ echo $num; // 0 if ( $num > 1){ recurrence($num-1); } echo $num; // 0 } //======第四层结束======== } echo $num; // 1 } //======第三层结束======== } echo $num; // 2 } //======第二层结束======== } echo $num; // 3 } |