Кто-либо может предложить программировать примеры, которые иллюстрируют рекурсивные функции? Существуют обычные старые лошади, такие как ряд Fibonacci и Ханойские башни, но что-либо помимо них было бы забавой.
Вот прагматичный пример из мира файловых систем. Эта утилита рекурсивно подсчитывает файлы в указанном каталоге. (Не помню почему, но когда-то давно у меня была необходимость в чем-то подобном...)
public static int countFiles(File f) {
if (f.isFile()){
return 1;
}
// Count children & recurse into subdirs:
int count = 0;
File[] files = f.listFiles();
for (File fileOrDir : files) {
count += countFiles(fileOrDir);
}
return count;
}
(Обратите внимание, что в Java экземпляр File
может представлять как обычный файл, так и каталог. Эта утилита исключает каталоги из подсчета.)
Обычным примером в реальном мире может быть, например, FileUtils.deleteDirectory()
из библиотеки Commons IO; см. API doc и source.