php递归分析

原创 2017年01月03日 21:40:04

什么叫递归?

举一个通俗的例子:

有一个8俩重的苹果要你切成重量相等的若干份,每一份的重量不能大于1俩。你肯定会想到这样做:

1.第一刀先把一个苹果切成重量均等的2份A1和A2;

2.再把其中的一份A1切成重量均等的两份A11和A12, 把A2切成均等的两份A21和A22;

3.把A11切成均等的两份……

4.直到每一小份都小于等于1俩为止。

以上的例子就是递归一个模型,把一个大的事物化成若干个小的事物,每一次使用的方法都相同。


程序自身调用自身的编程技巧称为递归( recursion递归有直接递归和间接递归

•直接递归:函数在执行过程中调用本身。

•间接递归:函数在执行过程中调用其它函数再经过这些函数调用本身。

递归有四个特性:

1.必须有可最终达到的终止条件,否则程序将陷入无穷循环;

2.子问题在规模上比原问题小,或更接近终止条件;

3.子问题可通过再次递归调用求解或因满足终止条件而直接求解;

4.子问题的解应能组合为整个问题的解。

 

上面的例子中也满足以上的四点性质:

(1).终止条件是每一份的重量不能大于1俩;(2).每一次切的大小都比上一次小;(3).每一次切的方式都相同,所以子问题可递归调用;(4).最终切成的每一小份也就是要求的解。

 

function cutApple($w,$t){
	if($w<1){
		echo "已经切完了";
	}
	else{
		echo "第".$t."次切割,每份重量是:".($w/2)."<br>";
		$t+=1;
		cutApple($w/2,$t);
	}
}

结果:

第1次切割,每份重量是:7.5

第2次切割,每份重量是:3.75
第3次切割,每份重量是:1.875
第4次切割,每份重量是:0.9375

已经切完了

再举一个通俗的例子:试求等差数列的和:1+2+3+4+...+98+100;

/**
 * 等差数列求和
 * @param [int] $n [第一个数]
 * @param [int] $m [第二个数]
 */
function add($n,$m){
	if(!is_int($n)||!is_int($m)) 
		return false;
	static $sum=0;
	$sum+=$n;
	$n++;
	if($n>$m) return $sum;
	return add($n,$m);
}
echo add(1,100);


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

【PHP】php 递归、效率和分析

递归的定义     递归(http:/en.wikipedia.org/wiki/Recursive)是一种函数调用自身(直接或间接)的一种机制,这种强大的思想可以把某些复杂的概念变得极为简单。在计...

php递归解析xml

两个不用递归的php树形数组构造函数(转)

/** * 创建父节点树形数组 * 参数 * $ar 数组,邻接列表方式组织的数据 * $id 数组中作为主键的下标或关联键名 * $pid 数组中作为父键的下标或关联键名 * 返回 多维...

PHP递归生成TREE

php递归创建和删除文件夹

<?php /** * 目录生成类 :UtilsMakeDir * @author yepeng * @since 2010.3.18 */ class UtilsMakeDir{ //基...

php 递归的简单使用

递归,都可以用循环来代替,能写循环尽量写循环,那样好理解点。下面是两个小例子。

php 无限分类递归及其排序详细解读

在各种栏目以及分类设置中,无限分类经常会被用到,而无限分类在进行排序的时候必然要用到递归,这里进行一次详细的分析解读。 首先我们先了解一下递归函数: 递归函数在语言学习的时候会单独拿出来学习,因为...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)