PHP再帰に関する新たな問題

WBOY
リリース: 2016-06-23 14:22:52
オリジナル
879 人が閲覧しました

この投稿は 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}  }
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー


あなたの理解では、最後のエコーはまだ実行されます。

アウトプットする必要があるのは明らかです。 。
プログラムは次のように表示されます
$str=123;
if(strlen('123')>0) 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.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート