Rumah >pembangunan bahagian belakang >tutorial php >php递归的新问题
<?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} }
很明显是要输出的呀。。
你的程序可以看成这样
$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} }
如果把你程序转换为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} }
<?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);