php递归的新问题

WBOY
Release: 2016-06-23 14:22:52
Original
879 people have browsed it

本帖最后由 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...*/   ?>
Copy after login


回复讨论(解决方案)

函数无论是否 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}  }
Copy after login
Copy after login
Copy after login


你的理解有问题的,按你的方法最后的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}  }
Copy after login
Copy after login
Copy after login


你的理解有问题的,按你的方法最后的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);//都会被执行}?>
Copy after login

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

<?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}  }
Copy after login
Copy after login
Copy after login


你的理解有问题的,按你的方法最后的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);
Copy after login
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template