関数の再帰を理解しようとしていますが、私が持っているスニペットに行き詰まっています。番号が1に一致するまで何度も呼び出す階乗の例を完全に理解していますが、ここで問題は、最初に実行されるのは何ですか? foreach ループですか、それとも再帰呼び出しですか?
スニペットは次のとおりです。
たとえば、 foreach ループが呼び出されたときに初めて実行される値となる初期文字列 'abc' が与えられた場合 ( permute($str) as $permutation )?
function permute($str)
{
if (strlen($str) < 2)
{
return array($str);
}
$permutations = array();
$tail = substr($str, 1);
foreach (permute($tail) as $permutation)
{
$length = strlen($permutation);
for ($i = 0; $i <= $length; $i++)
{
$permutations[] = substr($permutation, 0, $i) . $str[0] . substr($permutation, $i);
}
}
/* Return the result */
return $permutations;
}