作者:苏打c | 来源:互联网 | 2013-07-22 14:05
递归的实质就是出现零界点后返回。如果不存在零界点则会出现死循环。所以如何判断零界点是递归能否成功运用的重要点,下面我给出得实例都明确注释了零界点。其次,我们需要理解递归的流程走向问题。我总结为:先深入,再弹出,我们可以计算出函数被执行了多少次。下面我们就实例讲述此问题。
03
|
if(strtolower($_SERVER['REQUEST_METHOD']) =='post')
|
05
|
$num=intval($_REQUEST['number']);
|
16
|
$result= recursive($num);
|
18
|
echostrval($num)."的阶乘是:".$result;
|
26
|
if($n== 1)return$n;//零界点 此处是弹出
|
27
|
return$n* recursive($n-1);//此处是深入
|
29
|
// 阶乘的零界点是 n->1->n的一个过程
|
36
|
$arr=array(array('id'=>1,'name'=>'新闻中心','father'=>0,'deep'=>1),
|
37
|
array('id'=>2,'name'=>'国内中心','father'=>1,'deep'=>2),
|
38
|
array('id'=>3,'name'=>'娱乐新闻','father'=>0,'deep'=>1),
|
39
|
array('id'=>4,'name'=>'体育新闻','father'=>3,'deep'=>2),
|
40
|
array('id'=>5,'name'=>'明星绯闻','father'=>4,'deep'=>3),
|
41
|
array('id'=>6,'name'=>'北京新闻','father'=>1,'deep'=>2),
|
42
|
array('id'=>7,'name'=>'北京娱乐','father'=>3,'deep'=>2));
|
47
|
functionUnlimitedclass($arr=array(),$fid= 0)
|
49
|
//数组实现 必须使用静态数组 否则值会丢失
|
50
|
static$results=array();
|
51
|
if(is_array($arr) &&$arr)
|
55
|
//零界点是所有顶级栏目的最末节点 此处既为弹出
|
56
|
if($v['father'] ==$fid)
|
58
|
$results[$v['id']] =array('id'=>$v['id'],'name'=>$v['name'],'deep'=>$v['deep']);
|
60
|
Unlimitedclass($arr,$v['id']);
|
67
|
$re= Unlimitedclass($arr);
|
68
|
if(is_array($re) &&$re)
|
72
|
echostr_repeat(' ',$v['deep']).$v['name'].'
|
76
|
// 上例中定义了一个静态变量,所谓静态变量就是在离开函数之后 值不会丢失;
|
78
|
// 给你一个数N 每M次剔除一只猴子 一直循环下去直到剩下最后一只,则这只猴子就是大王
|
79
|
$mOnkeys= range(1,10);// 猴子编号
|
81
|
for($i=0;count($monkeys)>1;$i++)
|
89
|
array_push($monkeys,$monkeys[$i]);
|