php递归函数中使用return的注意事项

 php递归函数中使用return的时候会碰到无法正确返回想要的值得情况,下面就来举例子来说明一下吧

php递归函数中使用return的时候会碰到无法正确返回想要的值得情况,如果不明白其中的原因,很难找出错误的,就下面的具体例子来说明一下吧: 
代码如下:
function test($i){ 
$i-=4; 
if($i<3){ 
return $i; 
}else{ 
test($i); 


echotest(30); 
 
这段代码看起来没有问题,如果不运行一下估计你也不会认为他有什么问题,及时运行起来发现有问题你也不一定知道哪里有问题,但其实这个函数的else里面是有问题的。在这段代码里面执行的结果是没有返回值的。所以虽然满足条件 $i<3 时return $i整个函数还是不会返回值的。因此对上面的PHP递归函数可做如下修改(更多PHP教程请访问代码家园): 
代码如下:
function test($i){ 
$i-=4; 
if($i<3){ 
return $i; 
}else{ 
return test($i);//增加return,让函数返回值 


echotest(30); 
 

时间: 2024-12-27 07:42:10

php递归函数中使用return的注意事项的相关文章

数据结构 递归与栈-求大神指导调用递归函数中的栈是怎么运行的

问题描述 求大神指导调用递归函数中的栈是怎么运行的 回溯法与树的遍历 回溯法:其求解过程实质是一个先序遍历一棵"状态树"的过程,只是这棵树不是遍历前预先建立的,而 是隐含在遍历过程中. 题目描述:求含n个元素的集合的幂集. 例:A={1,2,3},则A的幂集为{{1,2,3},{1,2},{1, 3},{2,3},{1},{2},{3},{}} 解题思路:求幂集的过程可看成是依次对集合A中的元素进行取或舍的过程. 选择合适的数据结构--假设以线性表表示集合. 树根结点表示幂集元素的初始

Python中除法使用的注意事项_python

本文实例讲解了Python中除法使用的注意事项,是非常重要的技巧,对于Python程序设计来说有很好的借鉴价值.具体分析如下: 现来看如下示例: def avg(first, *rest): return (first + sum(rest)) / (1 + len(rest)) # Sample use avg(1, 2) # 1.5 avg(1, 2, 3, 4) # 2.5 源程序只是为了演示变长参数的使用,不过 Python 2.7.1 的解释器里,我得到的结果却和注释的结果不一样 >>

Java异常处理--尽量不要从try区段中返回(return)

异常处理 Java异常处理模型与其他语言相比,关键词finally是最出色的新增特性了.finally构件使得该区段中的代码总是得以执行,而无论是否发生异常,特别适用于维护对象的内部状态(用来保证异常发生恢复对象的有效状态,以确保程序能在处理完异常后自动再次投入运行)和清理non-memory资源(垃圾回收机制无法处理的资源,如数据库连接.Socket等等).         但有一点值得注意,那就是尽量不要从try区段中返回(调用return),因为只要有finally区段存在,它就一定会被执

Access使用查询--1.4.在查询中执行计算的注意事项

4.在查询中执行计算的注意事项 如果要在字段中显示计算的结果,可以使用 Microsoft Access 所提供的预定义计算或自定义的计算.使用所谓"总计"的预定义计算,可计算出记录组或全部 记录的下列量值:总和(Sum).平均值(Avg).数量(Count).最小值(Min).最大值(Max). 标准偏差(StDev)或方差(Var).可以对每个字段选择要进行的总计计算. 合计函数 Count 在计算时不能包括有空值 (Null) 的记录.例如,Count 函数返回所有 无 Null

php调用MsSQL存储过程使用内置RETVAL获取过程中的return值

本篇文章是对php调用MsSQL存储过程使用内置RETVAL获取过程中的return值的方法进行了详细的分析介绍,需要的朋友参考下   [PHP代码] 复制代码 代码如下:  $stmt = mssql_init('P__Global_Test', $conn) or die("initialize stored procedure failure");  mssql_bind($stmt, "RETVAL", $returnValue, SQLINT4, true

EasyUI中combobox默认值注意事项

 这篇文章主要介绍了EasyUI中combobox默认值注意事项,是个人在项目中遇到并解决的事宜,分享给大家,需要的朋友可以参考下     在修改数据时,需要先加载数据. 在加载combobox数据的时候,从后台传来的应该int类型的数据. html代码   代码如下: <tr> <td style="text-align: right;">院系:</td> <input type="hidden" id="bel

ie 8中onsubmit return false 无效问题的解决,表单还是提交了

问题描述 ie 8中onsubmit return false 无效问题的解决,表单还是提交了 ie 8中onsubmit return false 无效问题的解决,表单还是提交了 解决方案 IE8的bughttp://www.gbtags.com/gb/share/2432.htm 有人和你问题相同.用按钮代替吧. 解决方案二: 代码呢..无效说明你代码有问题报错了,没有执行到return false语句.注意你的return false一定要在onsubmit事件中,不要再其他回调中retu

java-Java中,finally在try语句块中的return前执行还是后执行

问题描述 Java中,finally在try语句块中的return前执行还是后执行 为什么finally没有改变变量a的值.求大神解答 解决方案 1.不管有木有出现异常,finally块中代码都会执行: 2.当try和catch中有return时,finally仍然会执行: 3.finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行

谈谈Java中try-catch-finally中的return语句_java

我们知道return语句用在某一个方法中,一是用于返回函数的执行结果,二是用于返回值为void类型的函数中,仅仅是一个return语句(return ;),此时用于结束方法的执行,也即此return后的语句将不会被执行,当然,这种情况下return语句后不能再有其它的语句了. 在try-catch-finally语句中使用return语句遇到了一些疑问 代码一: static int intc(){ int x =0; try{ x=1; return x; }finally { x = 3;