function scanDir(string $path): array {
$result = [];
foreach (scandir($path) as $item) {
if ($item === '.' || $item === '..') continue;
$full = "$path/$item";
$result[] = is_dir($full) ? scanDir($full) : $full;
}
return $result;
}Рекурсия элегантна для задач с естественной древовидной структурой. Но каждый вызов занимает место в стеке. Глубокая рекурсия может вызвать stack overflow. Для больших глубин — итерационный подход с явным стеком.