PHP 再帰問題
PHP コード
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->
function test($a)
{
echo ' '.$a.' ';
if($a >0)
{
test($a-1);
}else
{
echo '<--->';
}
echo '<B>'.$a.'</b>';
}
test(3)
ログイン後にコピー
3 2 1 0 <--->0 1 2 3
英雄の皆様、お願いします操作手順を説明するか、参考資料をクリックして勉強してください。私は初心者です。ご了承ください
-----解決策---------------------------- --お兄さん、関数を呼び出すときは、再帰呼び出しテスト($a-1)が完了したら、新しいスタックを開く必要があります。出力、わかりますか?
そしてもちろん次は <---> わかりますか?
最終的に、開いたスタックをリサイクルするときは、この echo '
'.$a.''; ~~~
何か理解できない場合は、指摘して頑張ってください~~
------解決策---------すべてのレイヤーは同じです:
1、print $a
2、次のレベルの再帰を入力するか、print <--->
3、print $a
その後:
print 3 . 2 を印刷、1 を印刷、0 を印刷、<--->、0 を印刷、1、2 を印刷、3 を印刷。
赤はステップ 1、青はステップ 2 です。
------解決策---------test(3) 関数テストを実行します:
1. echo $a = 3 を実行し、if 判定 3>0 を入力して test(2) を実行します。ここでは関数 test(3) がまだ実行されていません。まず test(2) を実行します ------- *1;
2. test(2) echo $a = 2 そして 2>0 と判断して test(1) を実行します。まだ実行されていません。まずはtest(1)を実行 ------------*2;
3.test(1) echo $a = 1; 次に1>0と判定してここでtest(0)を実行します。 (1)はまだ実行されていません。まずtest(0) -----------*3;
4. test(0) echo $a = 0; 次に0>0を判定してecho <--- >を実行します。 echo 0;
5. 4の実行後、*3に戻ります。判定が完了したら、echo $a = 1;
6. 5の実行後、*に戻ります。 2 echo $a = 2;
7. 6 実行後は*1に戻ります echo $a = 3;
これはレイヤーごとに進み、レイヤーごとに出力されます。