PHP中递归函数的一个常见逻辑问题
来源:互联网 发布:切糕王子 知乎 编辑:程序博客网 时间:2024/06/05 10:55
首先,我们得知道递归函数是什么东西,通俗来讲也就是自己调用自己本身的函数。
现在需要设计一段代码,解决1到10叠加的问题。
代码A:
<?php//递归函数$num=10;function add($sum){static $tot;if($sum>=1){$tot+=$sum;add(--$sum);}else{return $tot;}}echo add($num);?>代码B:
<?php//递归函数$num=10;function add($sum){static $tot;if($sum>=1){$tot+=$sum;return add(--$sum);}else{return $tot;}}echo add($num);?>A中打印不出想要的结果,B中可以实现。而A和B代码中的唯一差别就是在if中添加了一个return。
下面就开始分析整个递归的过程,完全可以去看看盗梦空间加深理解了:(以不能实现的A代码为例)
1.将10带入函数中,if语句判断之后,$tot开始叠加。
2.这里重点来了:将参数减一之后重新带入函数中。(没有返回值!!!)
3.接着上面的过程一直循环,一直到$sum=1,这从外到内,由10到1,这10层的循环都没有返回值。
4.$sum=0的时候,要求有返回值。
就好像,盗梦空间中,主角在11层梦境中醒来,但是前面10层的梦境都处于睡眠阶段。这主角你觉得醒的过来吗,明显不可能。他只能卡在第11层梦境,永远醒不过来。
唯一能让主角醒过来的办法也就是他的每一层梦醒都醒过来,一直回到现实生活中。而相对与A代码,B代码则从第一层开始就要求有返回值,一直到11层都要有返回值。所以11层醒过来之后激活了第10层,然后一层一层的激活,最后就顺利醒过来了,这个最后的结果也就正确输出了。
怪不得他们说盗梦空间用递归函数很好解释,想来确实有点。
剩下的就是自己再深入理解了,一上来确实会有点晕。
2 0
- PHP中递归函数的一个常见逻辑问题
- php中递归函数
- php-cgi中一个常见的错误
- php中常见的字符串格式化函数
- php中数组常见的函数
- php中常见的系统函数
- php二维数组中常见的问题
- PHP中会话处理函数的逻辑流程
- php递归函数return问题
- php递归函数求一个数的阶乘
- PHP中使用递归函数
- 常见的php函数
- 【php】php中常见的排序函数总结
- php中常见数组函数
- 一个逻辑问题的记录
- 逻辑回归中代价函数的选择.凸优化问题
- php递归函数中使用return的注意事项
- php中一个神奇的函数extract
- 对话框
- ibatis学习笔记-模糊查询实体对象
- linux函数之atoi
- IP地址相关知识
- HTML中获取本地时间
- PHP中递归函数的一个常见逻辑问题
- C/C++语言 static关键字的用法
- 编程之美之队列中取最大值操作
- java读取xls
- 八卦与ASCII码
- 编程之美之求二叉树中节点的最大距离
- C++高精度模板
- 关于KeyPress事件只能输入数字小数的问题
- 字符串类型的数字从小到大排序方法