简单的理解就是,函数里面直接或者间接的调用函数自己.php
1.函数累不调用自己
2.须要有明确的结束条件,否则容易形成死循环.
3.递归函数的代码当然简洁,可是执行效率较低,须要结合本身的需求制定相应的算法,不推荐使用递归.
4.递归函数的执行顺序依次是从外部执行到最里层,当知足限制条件的时候,依次从内部执行到最外层.算法
使用递归函数和栈逆序一个栈(只能使用栈一种数据结构)数据结构
1.获取一个栈的栈底元素删除而且返回最底层元素.
2.利用1种的递归函数,逆序这个栈函数
/** * 获取而且删除栈的最后一个元素 */ function getAndRemoveLastElement (&$stack) { // 弹出最外层的元素. $element = array_pop($stack); if (!empty($stack)) { $last = getAndRemoveLastElement($stack); array_push($stack,$element); return $last; } else { // 递归的结束条件,栈为空. return $element; } }
/** * 逆序这个栈. * @param $stack */ function reverse (&$stack) { // 递归退出的限制条件. if (!empty($stack)) { $i = getAndRemoveLastElement($stack);// 未符合如今条件时,依次从外到里面执行. reverse($stack); // 符合限制条件后依次从里到外向下执行. array_push($stack,$i); } else { // 为空就返回. return ; } }
<?php $stack = array(1,2,3,4,5); reverse($stack); var_dump($stack);
输出为code
array(5) { [0]=> int(5) [1]=> int(4) [2]=> int(3) [3]=> int(2) [4]=> int(1) }