2017-10-05 6 views
1

文字列「Hello、PHP」があり、再帰関数を使用して を3回繰り返したいとします。文字列を3回印刷するPHP再帰関数が機能しない

だから私はこれを試してみた:

$initialString = "Hello, PHP"; 
$myFunc = function(&$myFunc, $n = 3, $initialString){ 
    if($n >= 0){ 
     $temp = $myFunc($myFunc, $n - 1, $initialString); 
     $initialString .= ", " . $initialString; 
     return $temp; 
    } 

    return $initialString; 
}; 

それが動作しない、と私はそれを印刷することはできません。

+2

は "平均動作しない" んか?具体的にお読みください:https://stackoverflow.com/help/mcve –

+0

'echo $ myFunc'を試しましたか? – Swellar

答えて

1

あなたの再帰的な試みの問題は、$ N = 3、あなたは再帰ベースif($n >= 0){に合格すると、すぐにあなたが再帰的に呼び出すときに、あなたの変数にあなたの変更を適用する前に

を再帰関数を呼び出しているということです$initialstringの変更前に再び機能します。

ので$n = 2は今、再帰ベースは$initialstringあなたはそれがいかなる修正なし$initialstringを返すまで、まだ同じ動作を行います再帰関数を返します内の任意の変更前に再び渡され、されます。

すべてあなたのケースで必要なのは、再帰呼び出しの前に$initialString .= ", " . $initialString;を移動することです。

$initialString = "Hello, PHP"; 
$myFunc = function(&$myFunc, $n = 3, $initialString){ 
    if($n >= 0){ 
     $initialString .= ", " . $initialString; 
     $temp = $myFunc($myFunc, $n - 1, $initialString); 
     return $temp; 
    } 

    return $initialString; 
}; 

ライブ例:あなたは、文字列の変更の連結再帰的であるため、この場合には、あなたが「こんにちは、PHP」3回文字列を取得することはできません、というhttps://3v4l.org/Aa2Rd

ノートでは、それはだ

0

渡されたカウンタから1を取る前に> = 0をチェックするので、ルーチンは4回繰り返します。

関数を呼び出した後に文字列を操作しますが、その後は文字列を何も処理しません。呼び出しの前に文字列を操作すると、素早く項目を追加することができます(繰り返した文字列を渡した後、繰り返し文字列を繰り返すなど)

おそらく次のようになりますすでにカウントを超えています。

$initialString = "Hello PHP"; 
$myFunc = function($n = 3, $initialString) use (&$myFunc) { 
    if($n > 0){ 
     $temp = $initialString . "," . $myFunc($n - 1, $initialString); 
     return $temp; 
    } 

    return ''; 
}; 

echo $myFunc(3, $initialString); 
0

これを試してください:

$initialString = "Hello, PHP"; 
$n=3; 
function printtr($initialString, $n) 
{ 
    if ($n==0) 
    { 
     exit; 
    } 
    echo $initialString."<br/>"; 
    $n = $n-1; 
    printtr($initialString, $n); 
} 
printtr($initialString, $n); 
関連する問題