首页 > 后端开发 > 正文

php实现递归的方法是什么

2024-08-07 00:27:28 | 我爱编程网

小编今天整理了一些php实现递归的方法是什么相关内容,希望能够帮到大家。

本文目录一览:

php实现递归的方法是什么

php实现递归的方法是什么


php实现递归的方法是:1、利用引用做参数,代码为【$result[]=$a;test($a,$result)】;2、利用全局变量;3、利用静态变量,代码为【static $count=0;】。
【相关学习推荐:php图文教程】
php实现递归的方法是:
一、利用引用做参数
先不管引用做不做参数,必须先明白引用到底是什么?引用不过是指两个不同名的变量指向同一块存储地址。本来每个变量有各自的存储地址,赋值删除各行其道。现在可好,两个变量共享一块存储地址。 $a=&$b; 。实际上指的是 $a 不管不顾自己原来的存储地址,非要和 $b 共享一室了。因而任何对存储地址数值的改变都会影响两个值。
函数之间本来也是各行其是,即便是同名函数。递归函数是考虑将引用作为参数,成为一个桥梁,形成两个函数间的数据共享。虽然两个函数见貌似操作的是不同地址,但是实际上操作的是一块儿内存地址。
function test($a=0,&$result=array()){
$a++;
if ($a<10) {
$result[]=$a;
test($a,$result);
}
echo $a;
return $result;

}上面的例子非常简答,以a<10作为判断条件,条件成立,则把a赋给result[];将result的引用传入函数,会将每一次递归产生的a添加到结果数组result。因而本例生成的$result数组是 Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 [8] => 9 ) 。
本例比较有意思的是echo a的值。相信很多人认为是12345678910吧,其实不然,是1098765432。为什么呢?因为函数还没执行echoa前就进行了下一次的函数递归。真正执行echo a是当a<10条件不满足的时候,echo a,返回result,对于上一层而言,执行完递归函数,开始执行本层的echo $a,依次类推。
例子二、
PHP 的引用允许用两个变量来指向同一个内容,例如 $a = &$b; 这意味着 $a 和 $b 指向了同一个变量。
如下例子,因为 $data 使用了引用传递,所以数据会一直累加。
function recursion(&$data = [], $i = 0)
{
if ($i < 10) {
$data[] = $i;
$i++;
$this->recursion($data, $i);
}
return $data;
}
// 调用
$this->recursion(); // [0,1,2,3,4,5,6,7,8,9]二、利用全局变量
利用全局变量完成递归函数,请确保你确实理解什么是全局变量。global在函数内申明变量不过是外部变量的同名引用。变量的作用范围仍然在本函数范围内。改变这些变量的值,外部同名变量的值自然也改变了。但一旦用了&,同名变量不再是同名引用。利用全局变量实现递归函数没必要理解到这么深的一层,还保持原有对全局变量的看法就可以顺理成章理解递归函数。
function test($a=0,$result=array()){
global $result;
$a++;
if ($a<10) {
$result[]=$a;
test($a,$result);
}
return $result;
}global 在函数内申明变量不过是外部变量的同名引用。变量的作用范围仍然在本函数范围内。改变这些变量的值,外部同名变量的值自然也改变了。
function recursion($data = [], $i = 0)
{
global $data;
if ($i < 10) {
$data[] = $i;
$i++;
$this->recursion($data, $i);
}
return $data;
}

// 调用
$this->recursion(); // [0,1,2,3,4,5,6,7,8,9]三、利用静态变量
我们常常在类中见到static,今天我们把它利用到递归函数中。请记住static的作用:仅在第一次调用函数的时候对变量进行初始化,并且保留变量值。
举个栗子:
function test(){
static $count=0;
echo $count;

$count++;
}
test();
test();
test();
test();
test();请问这一段代码的执行结果是多少?是00000么?必然不是。是01234。首先第一次调用test(),static对 $count 进行初始化,其后每一次执行完都会保留 $count 的值,不再进行初始化,相当于直接忽略了 static $count=0; 这一句。
因而将static应用到递归函数作用可想而知。在将需要作为递归函数间作为“桥梁"的变量利用static进行初始化,每一次递归都会保留"桥梁变量"的值。
function test($a=0){
static $result=array();
$a++;
if ($a<10) {
$result[]=$a;
test($a);
}
return $result;
}静态变量只在第一次调用时初始化。仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失。
function recursion($i = 0)
{
static $data = [];
if ($i < 10) {
$data[] = $i;
$i++;
$this->recursion($i);
}
return $data;
}

// 调用
$this->recursion(); // [0,1,2,3,4,5,6,7,8,9]相关学习推荐:php编程(视频)

php实现递归的方法是什么我爱编程网

php中用递归函数计算出16的4次方

在PHP中,可以使用递归函数来计算16的4次方。以下是一个使用递归函数的示例代码:
php
function power($base, $exponent) {
if ($exponent == 0) {
return 1;
} else {
return $base * power($base, $exponent - 1);
}
}

$result = power(16, 4);
echo $result; // 输出 65536
在上述代码中,power()函数接受两个参数:$base表示基数,$exponent表示指数。函数使用递归方式计算基数的指数幂。如果指数为0,则返回1,否则返回基数乘以递归调用power()函数的结果,其中指数减1。最后,将结果存储在$result变量中,并通过echo语句输出。

php实现递归的方法是什么

如何理解php中的递归函数 (详细讲解)

我爱编程网(https://www.52biancheng.com)小编还为大家带来如何理解php中的递归函数 (详细讲解)的相关内容。

递归其实就是“一个函数的自调用”
在这个“自调用”的过程中,必须要有一个变化的“参数”,当这个“参数”达到你的期望值的时候,终止该“自调用”过程

拿楼主的程序来说

demo($n)内部又有调用demo($n-1),构成了“自调用”
且,$n又有一个“期望值”,即是$n>1,不满足此条件时,该自调用终止

即是说,最后一个执行的demo是demo($n9-1),其中$n9=2,然后返回为1(因为执行了return 1)
则$n9*demo($n9-1)即等于 2*demo(2-1),又等于2*1=2;
则$n8*demo($n8-1)即等于 3*demo(3-1),又等于3*2=6;
则$n7*demo($n7-1)即等于 4*demo(4-1),又等于4*6=24;
……
依次类推

这样想:
demo(1)是等于1,这个没有疑问吧?
然后demo(2)等于2*demo(1)=2*1=2
然后demo(3)等于3*demo(2)=3*2=6
……
一直到demo(10)

以上就是我爱编程网小编为大家带来的内容了,想要了解更多相关信息,请关注我爱编程网。更多相关文章关注我爱编程网:www.52biancheng.com

免责声明:文章内容来自网络,如有侵权请及时联系删除。
与“php实现递归的方法是什么”相关推荐
php实现递归函数 php中用递归函数计算出16的4次方
php实现递归函数 php中用递归函数计算出16的4次方

php中用递归函数计算出16的4次方在PHP中,可以使用递归函数来计算16的4次方。以下是一个使用递归函数的示例代码:phpfunctionpower($base,$exponent){if($exponent==0){return1;}else{return$base*power($base,$exponent-1);}}$result=power(1

2024-12-20 06:33:34
php实现静态化方法是什么
php实现静态化方法是什么

php静态方法和实例方法的区别static关键字用来修饰属性、方法,称这些属性、方法为静态属性、静态方法。static关键字声明一个属性或方法是和类相关的,而不是和类的某个特定的实例相关,因此,这类属性或方法也称为“类属性”或“类方法”如果访问控制权限允许,可不必创建该类对象而直接使用类名加两个冒号“::”调用。static关键字可以用来修饰变量、方法。不经过实例化,

2024-07-20 17:51:09
thinkphp用递归怎么实现无限分类
thinkphp用递归怎么实现无限分类

thinkphp用递归怎么实现无限分类递归函数即为自调用函数,在函数体内直接或间接自己调用自己,但需要设置自调用的条件,若满足条件,则调用函数本身,若不满足则终止本函数的自调用,然后把目前流程的主控权交回给上一层函数来执行,可能这样给大家讲解,还是很难明白。思路:先建立对应的数据库和表:请注意pid和id的外键关联关系,最顶级的pid为0。class Tree{

2024-07-13 11:23:44
递归函数实例php php中用递归函数计算出16的4次方
递归函数实例php php中用递归函数计算出16的4次方

php递归无限极分类、分销方法以tp5为例无限极分类与分销方法,以tp5框架为例,实现PHP递归功能。首先,理解无限极分销的核心概念是自上而下和自下而上的层级结构。在自上而下的无限极分销模式中,每个层级的用户都直接隶属于上一层,形成一条清晰的层级链。自下而上的模式则相反,每个用户都可以向下发展自己的分销团队。在PHP中,递归是解决无限极分类与分销问题的关键。递归函数能够自动处理层

2024-12-25 07:45:58
php如何实现递归遍历文件目录
php如何实现递归遍历文件目录

php如何实现递归遍历文件目录只需要一个递归函数:function Folders($folder) { if (!is_dir($folder)) return false; foreach (scandir($folder) AS $f) { if ($f == '.' or $f == '..') continue; echo $f, '&lt;hr/&gt;'; Fold

2024-07-30 01:03:31
php递归函数求法 php递归 无限极分类、分销方法 以tp5为例
php递归函数求法 php递归 无限极分类、分销方法 以tp5为例

用php编写:采用递归函数方法计算斐波拉契数列的前20项#include&lt;stdio.h&gt;intFibonacci(intn){if(n==1||n==2)//递归结束的条件,求前两项return1;elsereturnFibonacci(n-1)+Fibonacci(n-2);//如果是求其

2025-01-09 12:07:01
php 用函数递归求1到20的平方和(php递归 无限极分类、分销方法 以tp5为例)
php 用函数递归求1到20的平方和(php递归 无限极分类、分销方法 以tp5为例)

php用函数递归求1到20的平方和function sum_of_multi($n) { if($n == 1) return 1; else { return $n*$n + sum_of_multi($n -1); }}echo sum_of_multi(20);php递归无限极分类、分销方法以tp5为例无限极分类与分销方法,以tp5框架为例,实现PHP递归功能。首先,理解

2025-01-15 11:13:52
编写自定义函数实现1到100的偶数累加 请用 php程序实现 php中用递归函数计算出16的4次方
编写自定义函数实现1到100的偶数累加 请用 php程序实现 php中用递归函数计算出16的4次方

用PHP函数排学生成绩问题&lt;?php/*1.学生成绩0-59不及格,60-70 普通成绩 70-80 良好 80-90 优秀 90-100 优异。现在有三个学生a,b,c,成绩分别是50分 80分 95分,判断这三个学生分别属于哪类。首先,各类别分数设定不严谨,正确应该为:0-59不及格,60-69普通,70-79良好,80-89优秀,90-100优异*/echo "学生a类型为:" 

2024-10-08 03:25:11