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);

(0)

相关推荐

  • php使用递归函数实现数字累加的方法

    本文实例讲述了php使用递归函数实现数字累加的方法.分享给大家供大家参考.具体实现方法如下: <?php function summation ($count) { if ($count != 0) : return $count + summation($count-1); endif; } $sum = summation(10); print "Summation = $sum"; ?> 希望本文所述对大家的php程序设计有所帮助.

  • php实现用于删除整个目录的递归函数

    本文实例讲述了php实现用于删除整个目录的递归函数.分享给大家供大家参考.具体实现方法如下: <?php function delete_directory($dir) { if ($dh = @opendir($dir)) { while (($file = readdir ($dh)) != false) { if (($file == ".") || ($file == "..")) continue; if (is_dir($dir . '/' . $

  • php实现递归的三种基本方式

    递归函数是我们常用到的一类函数,最基本的特点是函数自身调用自身,但必须在调用自身前有条件判断,否则无限无限调用下去.实现递归函数可以采取什么方式呢?本文列出了三种基本方式.理解其原来需要一定的基础知识水品,包括对全局变量,引用,静态变量的理解,也需对他们的作用范围有所理解.递归函数也是解决无限级分类的一个很好地技巧.如果对无限级分类感兴趣,请参照php利用递归函数实现无限级分类.我习惯套用通俗的话解释复杂的道理,您确实不明白请参见手册. 利用引用做参数 先不管引用做不做参数,必须先明白引用到底是

  • php function用法如何递归及return和echo区别

    复制代码 代码如下: <?php //模拟sql数据 $array = array(0=>'apple',1=>'banana',2=>'cat',3=>'dog',4=>'egg','5'=>'father'); //function 用法1 //arr 是传入的数据 $con 是条件 function f_1($arr,$con){ //这里的 array 是这个函数内私有的,不会和出面的array冲突 //所以,外地面的 array不里直接在内面用,里面的a

  • 浅析PHP递归函数返回值使用方法

    PHP经过长时间的发展,很多用户都很了解PHP了,PHP最初是1994年Rasmus Lerdorf创建的,刚刚开始只是一个简单的用Perl语言编写的程序,用来统计他自己网站的访问者.后来又用C语言重新编写,包括可以访问数据库. 在 1995年以Personal Home Page Tools (PHP Tools) 开始对外发表第一个版本,Lerdorf写了一些介绍此程序的文档,并且发布了PHP1.0.在这早期的版本中,提供了访客留言本.访客计数器等简单的功 能.以后越来越多的网站使用了PHP

  • php递归使用示例(php递归函数)

    //递归获得角色ID字符串 function explodeRole($roleObj, &$resultStr){ if(0 < count($roleObj->childRoleObjArr)){ foreach($roleObj->childRoleObjArr as $childRoleObj){ if('' == $resultStr){ $resultStr .= "{$childRoleObj->id}"; }else{ $resultSt

  • php rmdir使用递归函数删除非空目录实例详解

     首先向大家介绍一下rmdir()函数. php rmdir()函数 rmdir - 删除空目录 语法: bool rmdir ( string $dirname [, resource $context ] ) 尝试删除 dirname 所指定的目录. 该目录必须是空的,而且要有相应的权限. 失败时会产生一个E_WARNING级别的错误. 参数: 1.dirname:目录的路径. 2.context:在 PHP 5.0.0 中增加了对上下文(Context)的支持. php rmdir()删除

  • PHP基于简单递归函数求一个数阶乘的方法示例

    本文实例讲述了PHP基于简单递归函数求一个数阶乘的方法.分享给大家供大家参考,具体如下: 一.问题: 求一个数a的阶乘,那么,a!=a*(a-1)*(a-2)*(a-3)*--*2*1.比如,6的阶乘6!=6*5*4*3*2*1=720.那么,如何通过php代码实现求任意一个数的阶乘? 二.实现代码: <?php function demo($a) { if ($a > 1) { $r = $a * demo($a - 1); } else { $r = $a; } return $r; }

  • php递归函数三种实现方法及如何实现数字累加

    递归函数在编程中是比较常用的一类函数,其特点是函数自身可以调用自身,但是必须在调用自身前有条件判断,否则会导致无限调用下去.本文列出了三种递归函数实现方法,第一种利用引用做参数,第二种利用全局变量,第三种利用静态变量,理解此类问题需要有点基础,包括对全局变量,引用,静态变量的理解,也需对他们的作用范围有所理解.在这不废话了,具体介绍请看下文. 第一种方法:利用引用做参数 先不管引用做不做参数,必须先明白引用到底是什么?引用不过是指两个不同名的变量指向同一块存储地址.本来每个变量有各自的存储地址,

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

    php递归函数中使用return的时候会碰到无法正确返回想要的值得情况,如果不明白其中的原因,很难找出错误的,就下面的具体例子来说明一下吧: 复制代码 代码如下: function test($i){ $i-=4; if($i<3){ return $i; }else{ test($i); } } echotest(30); 这段代码看起来没有问题,如果不运行一下估计你也不会认为他有什么问题,及时运行起来发现有问题你也不一定知道哪里有问题,但其实这个函数的else里面是有问题的.在这段代码里面执

  • 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 的解释器里,我得到的结果却和注释的结果不一样 >>

  • Python编程如何在递归函数中使用迭代器

    首先,想要实现的功能是递归遍历文件夹,遇到满足条件的文件时,用yield返回该文件的位置. 如果不用递归器,可以这样实现: path_list = [] def get_one_cage(root: str, cook_folder_name: str): for item in os.listdir(root).copy(): item_path = os.path.join(root, item) if item == cook_folder_name: path_list.append(i

  • C/C++中的静态变量注意事项

    前言 C/C++中的静态变量,相信大多数人都用过,但你很可能用错了,包括你现在所在的项目中都可能埋着这个坑,不信我们往下看! 正文 我们先来看一段大家常写的代码,很简单,这段代码没啥坑: #include <stdio.h> int GetData() { static int a = 0; return a++; } int main() { for (int i = 0; i < 100; ++i) { printf("%d\n", GetData()); } }

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

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

  • java面试题之try中含return语句时代码的执行顺序详解

    前言 最近在刷java面试题偶然看到这类问题(try/finally中含有return时的执行顺序),觉得挺有意思于是小小的研究了一下,希望经过我添油加醋天马行空之后,能给你带来一定的帮助,下面来看看详细的介绍. 原题 try {} 里有一个return语句,那么紧跟在这个try后的finally {}里的代码会不会被执行?什么时候被执行?在return前还是后? 乍一看题目很简单嘛,java规范都说了,finally会在try代码块的return之前执行,你这文章写得没意义,不看了 你等等!(

  • 学习jQuey中的return false

    jQuey中的return false作用是什么? 在众多的语句中都有return false的使用,当然对于熟悉它的开发者来说,当然是知根知底,知道此语句的作用,当然也就知道在什么时候使用此语句,不过对于初学者可能未必掌握的很清晰明了,下面通过实例介绍一下return false语句的作用. return语句的作用一般是返回函数值,并不再执行下面的语句,直接跳到函数调用的地方,另外还有一个重要的作用,那就是取消默认事件行为的发生. 代码实例如下: <!DOCTYPE html> <ht

  • php中call_user_func函数使用注意事项

    本文实例讲述了php中call_user_func函数使用注意事项.分享给大家供大家参考.具体分析如下: call_user_func函数的注意事项:parse error: syntax error, unexpected t_list, expecting t_string in,今天在使用这个函数的时候一直提示上述问题,参看官方的手册也没有介绍使用其的注意事项. 附:mixed call_user_func(callback $function [,mixed $parameter [,m

  • JavaScript中的return语句简单介绍

    return语句在js中非常的重要,不仅仅具有返回函数值的功能,还具有一些特殊的用法,下面就结合实例简单介绍一下return语句的作用. 一.用来返回控制和函数结果: 通常情况,return语句对于一个函数是很有必要的,因为往往需要函数在一系列的代码执行后会得到一个期望的返回值,而此值就是通过return语句返回,并且将控制权返回给主调函数. 语法格式: return 表达式 代码实例如下: function add(){ var a=1; var b=2; return a+b; } func

  • Android 中ViewPager中使用WebView的注意事项

    Android 中ViewPager中使用WebView的注意事项 前言: 今天在做项目时遇到了一个小问题 首先使用ViewPager显示多个页面,然后在每个页面上使用Fragment显示数据,其中有一部分数据是通过WebView加载的Html标签. 具体xml布局如下 <?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.andr

随机推荐