Он не игнорирует его, потому что он просто делает еще один рекурсивный вызов - исходный вызов (с коллекцией файлов с верхнего уровня) все еще находится в стеке. Он делает новый вызов с новым списком файлов, на который ссылается параметр новый , называемый files
в новом фрейме стека .
Так что, если структура каталогов c:/a/b/c
, вы получите стек:
showFiles([c:/a/b/c])
showFiles([c:/a/b])
showFiles([c:/a])
main(...)
Когда возвращается «самый глубокий» вызов (вершина стека), следующий кадр стека все равно будет знать о любых других файлах того же уровня и вполне может повториться снова.