PHP-简单理解递归
我们知道,程序调用自身的编程技巧称为递归( recursion)。那么,该怎么去直接的理解它呢。
一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。
递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
好了,言归正传,用代码来看:(用PHP
实现,计算一个数的阶乘($i为正整数)):
// 假设 $i 是正整数
function recursive($i){$sum = 1;echo '$i当前的值为'.$i."<br>";if ($i == 1){echo '$i='.$i.'----$sum='.$sum."-------入栈结束,开始计算---<br>";return 1;}else{$sum = $i * recursive($i - 1);}echo '$i='.$i.'----$sum='.$sum."<br>";return $sum;
}
recursive(4);
输出:
$i当前的值为4
$i当前的值为3
$i当前的值为2
$i当前的值为1
$i=1----$sum=1-------入栈结束,开始计算---
$i=2----$sum=2
$i=3----$sum=6
$i=4----$sum=24
用个人理解解释:*(用上面的例子来说明)
其实递归就是一个堆栈的过程,。当$i=2
的时候,边界条件触发了,就不会再入栈了,递归开始返回,而栈是后进先出的原则,最后一个入栈的值是2
,从2
去计算,
当
$i
等于2
的时候,函数计算的结果是2
。(2
*recursive(2 - 1)
) 得到结果为2
。
当
$i=3
的时候,函数的计算结果是3
乘以 ($i = 2
的计算结果)。所以当 $i = 3的时候,计算结果是3
*2
等于6
。
当
$i=4
的时候,函数的计算结果是4
乘以 ($i = 3
的计算结果)。第二步就得出($i=3)的计算结果为6
,所以当 $i = 4 的时候函数的计算结果为4 * 6
=24
所以recursive(4)
最终计算的结果就是 24
。
将上面的例子中
$sum = $i * recursive($i - 1);
的乘号*
改成减号-
。计算recursive(4)
的最终结果:
function recursive($i){if ($i == 1){return 1;}else{$sum = $i - recursive($i - 1);}return $sum;
}
print_r(recursive(4));
用第一个例子的分析过程不难得出打印结果为2
。
PHP-简单理解递归相关推荐
- (JAVA编成练习):递归的使用,简单的列子帮你理解递归。
目录 前言: 1.什么是递归? 2.递归的定义: 3.递归图示: 4.第一题: (1)题目: (2)代码: a.关键处解析: b.完整代码: 5.第二题: (1)题目: (2)代码: a.关键处解析: ...
- 对于C语言函数递归的简单理解(新手入门必看!!!)
什么是函数递归? 程序调用自身的编程技巧称为递归(recursion). 递归做为一种算法在程序设计语言中广泛应用. 一个过程或函数在其定义或说明中有直接或间接 调用自身的 一种方法,它通常把一个大型 ...
- android 点击事件消费,Android View事件分发和消费源码简单理解
Android View事件分发和消费源码简单理解 前言: 开发过程中觉得View事件这块是特别烧脑的,看了好久,才自认为看明白.中间上网查了下singwhatiwanna粉丝的读书笔记,有种茅塞顿开 ...
- linun——SElinux的简单理解
SElinux简单理解 一.什么是SElinux? SELinux 全称 Security Enhanced Linux (安全强化 Linux),是 MAC (Mandatory Access Co ...
- 递归循环一个无限极数组_理解递归、尾调用优化和蹦床函数优化
想要理解递归,您必须先理解递归.开个玩笑罢了, 递归 是一种编程技巧,它可以让函数在不使用 for 或 while 的情况下,使用一个调用自身的函数来实现循环. 例子 1:整数总和 例如,假设我们想要 ...
- Python Turtle画分形树理解递归
递归思想 递归可以把一个复杂问题转化为一个与原问题相似的规模较小的问题,通过自己调用自己,找到最终解决这个问题的条件,达到判断条件时返回. 通过分形树理解递归 Python中的 turtle画图很方便 ...
- vue函数如何调用其他函数?_编程|如何简单理解函数的传参、返回、调用
1 函数内部变量的局部性 在一个函数中定义的变量(包括实参),其作用域仅限于定义它的函数中,在其它的函数不能使用,这种变量称为"局部变量". 局部变量的作用域:函数内部声明和定义的 ...
- java递归算法经典实例_Java实现简单的递归操作方法实例
前言 在数据结构算法设计中,或者一个方法的具体实现的时候,有一种方法叫做"递归",这种方法在思想上并不是特别难,但是实现起来还是有一些需要注意的.虽然对于很多递归算法都可以由相应的 ...
- 递归算法-Java实现简单的递归操作
在数据结构算法设计中,或者一个方法的具体实现的时候,有一种方法叫做"递归",这种方法在思想上并不是特别难,但是实现起来还是有一些需要注意的.虽然对于很多递归算法都可以由相应的循环迭 ...
- Java实现简单的递归操作
在数据结构算法设计中,或者一个方法的具体实现的时候,有一种方法叫做"递归",这种方法在思想上并不是特别难,但是实现起来还是有一些需要注意的.虽然对于很多递归算法都可以由相应的循环迭 ...
最新文章
- java右键弹出菜单_javascript自定义右键弹出菜单实现方法
- QtJava笔记-Qt与Java进行SSL双向认证(Qt服务端,Java客户端)
- 离散数学计算机科学丛书答案,计算机《离散数学》期中试卷答案.docx
- crc16几种标准校验算法及c语言代码
- JavaWeb -- Struts1 使用示例: 表单校验 防表单重复提交 表单数据封装到实体
- Larry Ellison - 简介
- Nginx 这一牛X的功能,你知道吗
- cmd 根据计算机名查ip地址_教你怎么查看本机IP地址
- 使用java 语言 提取excel 中的手机号码,xls 格式以及xlsx 格式的excel 文件
- STM32 使用基本定时器实现微秒us级延时
- 小时候的蓝精灵,大家还记得木有哇?
- 珞珈-B生所学 跟学笔记 PPT(一)
- abb机器人常见维故障现象
- 大数据应用技术实验报告五 NoSQL
- lumen php命令,laravel and lumen 软删除操作
- oracle一体机的管理界面,Oracle 数据库一体机:zData Light - 分布式存储管理平台
- 技术胖React博客实战 - 新版问题解决方式整理
- 华科尔d10设置教程_华科尔D10刷Deviation设置参数求教
- [沟通能力] 述职,你搞定了吗?
- 12306快速刷新火车票