欢迎大家来到IT世界,在知识的湖畔探索吧!
递归函数:
递归函数即自调用函数,在函数体内部直接或间接地自己调用自己,即函数的嵌套调用是函数本身。
该函数必须有一种能够”停止调用”的机制,如使用if语句。该机制,被称为递归函数的”出口”。
实例1:
function f1($n){ echo $n." "; $n++; } f1(5);
欢迎大家来到IT世界,在知识的湖畔探索吧!
输出结果5
实例2:
欢迎大家来到IT世界,在知识的湖畔探索吧!function f1($n){ echo $n." "; $n++; if($n<10){ f1($n); } } f1(5);
输出结果:5 6 7 8 9
实例3
输出结果:5 6 7 8 9 9 8 7 6
实例4
欢迎大家来到IT世界,在知识的湖畔探索吧!function test($n){ echo $n." "; if($n>0) test($n-1); else echo "<-->"; } test(10)
输出结果:10 9 8 7 6 5 4 3 2 1 0 <-->
实例5
function test($n){ echo $n." "; if($n>0) test($n-1); else echo "<-->"; echo $n." "; } test(10)
输出结果:10 9 8 7 6 5 4 3 2 1 0 <-->0 1 2 3 4 5 6 7 8 9 10
讨论实际应用中的递归思想应用(阶乘的实现):
阶乘的数学定义:一个正整数的阶乘,是从1一直乘到它本身的乘积。
阶乘的一个基本算法是:
n的阶乘 = (n-1)的阶乘 * n;
其中,1的阶乘是1。
欢迎大家来到IT世界,在知识的湖畔探索吧!function jiecheng($n){ if($n == 1){ //1的阶乘是1(已知) return 1; } //其他数的阶乘,是 (该数) * (该数减一的阶乘) 的乘积 return jiecheng($n-1) * $n; } $v1 = jiecheng(5); echo "
v1 = $v1";
以下为该函数的模拟调用过程:
$v1 = jiecheng(5) $v1 = jiecheng(4) * 5 $v1 = (jiecheng(3) * 4) * 5 $v1 = ((jiecheng(2) * 3) * 4) * 5 $v1 = (((jiecheng(1) * 2) * 3) * 4) * 5
特别注意:上一行jiecheng(1)表示要求1的阶乘,但1的阶乘是"已知"的,为1
欢迎大家来到IT世界,在知识的湖畔探索吧!$v1 = (((1 * 2) * 3) * 4) * 5 $v1 = ((2 * 3) * 4) * 5 $v1 = (6 * 4) * 5 $v1 = 24 * 5 $v1 = 120
递归函数在类中如何定义?
如: 改名键名的大小写在类中方法的编写
private function changeArrKey($array, $case = 0){ if(!is_array($array)) return $array; $tempArray = array(); $do = ($case === 0)? "strtolower" : "strtoupper"; foreach ($array as $key=>$value){ $key = $do($key); if(is_array($value)){ $value = self::changeArrKey($value); //self 代表当前类 }else{ $value = $do($value); } $tempArray[$key] = $value; } return $tempArray; }
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/89481.html