php递归的新问题

php中文网
发布: 2016-06-23 14:22:52
原创
1166人浏览过

本帖最后由 iamsai 于 2013-09-28 14:04:34 编辑

<?php    reverse_i('hello');   function reverse_i($str){    if(strlen($str)>0)	    reverse_i(substr($str,1)); echo substr($str,0,1); //return} /* 大家看我的思路对吗?	reverse('hello');function reverse_i('hello')if(strlen('hello'))>0  reverse_i('ello');function reverse_i('ello')if(strlen('ello'))>0  reverse_i('llo');function reverse_i('llo')if(strlen('llo'))>0  reverse_i('lo');function reverse_i('lo')if(strlen('lo'))>0  reverse_i('o');function reverse_i('o')if(strlen('o'))>0   reverse('');function reverse_i('')if(strlen(''))>0此时不满足if条件就跳出if语句 执行下一句echo substr($str,0,1); 打印出一个空字符程序不就结束了吗?因为没有return语句也就没有返回调用它的return('o')也无法顺势打印出后面的olleh呀可程序输出仍然是olleh...*/   ?>
登录后复制

回复讨论(解决方案)

函数无论是否 return 语句,都会在函数执行完之后,继续执行调用函数的程序

你想达到你的要求应该改成:

<?php     reverse_i('hello');    function reverse_i($str){     if(strlen($str)>0) {   reverse_i(substr($str,1)); }else{//加上else不然还是会打印出来的 echo substr($str,0,1); //return}  }
登录后复制


你的理解有问题的,按你的方法最后的echo还是会被执行的

很明显是要输出的呀。。
你的程序可以看成这样
$str=123;
if(strlen('123')>0)    
 
    //reverse_i('23'); 
      if(strlen('23')>0){
         //reverse_i('3'); 
               if(strlen('3')>0){
                 //reverse_i(''); 不合,然后执行后面语句
               echo substr('3',0,1);//输出3
}
        echo substr('23',0,1);//输出2
}
 
echo substr('123',0,1);//输出1

你想达到你的要求应该改成:

<?php     reverse_i('hello');    function reverse_i($str){     if(strlen($str)>0) {   reverse_i(substr($str,1)); }else{//加上else不然还是会打印出来的 echo substr($str,0,1); //return}  }
登录后复制


你的理解有问题的,按你的方法最后的echo还是会被执行的

如果把你程序转换为if,大概流程是这样的

<?phpif(strlen('hello')>0){if(strlen('hello')>0){if(strlen('llo')>0){if(strlen('lo')>0){if(strlen('o')>0){if(strlen('')>0){//你以为只输出这个空的,其实前面的也都有执行echo substr('',0,1);}echo substr('o',0,1);}echo substr('lo',0,1);}echo substr('llo',0,1);}echo substr('ello',0,1);}echo substr('hello',0,1);//都会被执行}?>
登录后复制

你想达到你的要求应该改成:

<?php     reverse_i('hello');    function reverse_i($str){     if(strlen($str)>0) {   reverse_i(substr($str,1)); }else{//加上else不然还是会打印出来的 echo substr($str,0,1); //return}  }
登录后复制


你的理解有问题的,按你的方法最后的echo还是会被执行的


是吗?

<?php$str='hello';function reverse_i($str,$o_str =''){	$str = substr($str, 1);	$o_str .= $str.'<br>';	strlen($str) > 0 && $o_str = reverse_i($str,$o_str);	return $o_str; }echo reverse_i($str);
登录后复制

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号