Heim >Backend-Entwicklung >PHP-Tutorial >php递归的新问题

php递归的新问题

WBOY
WBOYOriginal
2016-06-23 14:22:52896Durchsuche

本帖最后由 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);

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn