Задачи на Рекурсию (учебные, для начинающих) -- программирование

В этом разделе собраны задачи на рекурсию.
На практике, если есть возможность написать нерекурсивный код, то лучше писать именно не рекурсивно, но тем не менее владеть этим методом необходимо, так как многие алгоритмы очень удобно описываются с помощью "матрёшки" рекурсивных вызовов.

Для разминки

Для разминки изучите вот это решение привычной задачи.

Задачи

  1. Дано целое положительное число $N$. Выведите на экран все число от $N$ до 1 (по убыванию).
  2. Дано целое положительное число $A$ и целое положительно число $B$. Выведите на экран все числа, расположенные между между ними.
  3. Дано целое положительное число $N$, вычислите $N!$ (эн факториал).
  4. На вход программе передаётся путь к папке (в виде строки, например '/home/username/').

    Найти максимальную глубину вложенности. Например если в эту папку вложены диретокрии, но в них директорий уже нет, то глубина вложенности = 1.

  5. Дано натуральное число N. Выведите все его цифры по одной, в обратном порядке, разделяя их пробелами или новыми строками.

    (При решении этой задачи нельзя использовать строки, списки, массивы (ну и циклы, разумеется). Разрешена только рекурсия и целочисленная арифметика. Используйте операцию получения остатка от деления, и операцию целочисленного деления).
  6. Дано натуральное число N. Выведите все его цифры по одной, в обычном порядке, разделяя их пробелами или новыми строками.


    (При решении этой задачи нельзя использовать строки, списки, массивы (ну и циклы, разумеется). Разрешена только рекурсия и целочисленная арифметика. Используйте операцию получения остатка от деления, и операцию целочисленного деления).

  7. Дано натуральное число N. Вычислите сумму его цифр.


    (При решении этой задачи нельзя использовать строки, списки, массивы (ну и циклы, разумеется). Разрешена только рекурсия и целочисленная арифметика. Используйте операцию получения остатка от деления, и операцию целочисленного деления).

  8. Файловая система ("обход дерева")

  9. На вход программе передаётся путь к папке (в виде строки, например '/home/username/').
    Вывести на экран рекурсивно все содержимое этой папки, например:
    /home/username/
    	Documents/
    	  history.doc
    	  smile.jpg
    	Downloads/
    	  sport.avi
    	Empty folder/
    
  10. На вход программе передаётся путь к папке (в виде строки, например '/home/username/').

    Напишите функцию, которая выводит на экран путь к наиболее "глубоко" лежащей поддиректории данной папки.

  11. На вход программе передаётся путь к папке (в виде строки, например '/home/username/').

    Напишите функцию, которая выводит на экран пути ко всем "листьям" вложенных элементов (это могут быть и файлы и пустые папки, лежащие "на краю" своей ветки).

  12. На вход программе передаётся путь к папке (в виде строки, например '/home/username/').

    Напишите функцию, которая выводит на экран путь к наиболее "глубоко" лежащей поддиректории или файлу (которой лежит в любой из поддиректорий) данной папки (соответственно, если ваша программа возвращает путь к директории, то это значит, что она пуста) -- если "конечные" файлы и директории лежат на одном уровне, пусть программа вернёт "первый попавшийся" путь.

    Подсказка:
    Для удобства сравнения "глубины" двух путей можно реализовать функцию, которая определяет "глубину" вложенности для данного пути, относительно корня файловой системы, например:

    • /home/user/ -- глубина 2
    • /home/user/text.txt -- глубина 3 (файл на последнем уровне)
    • /home/user/myfolder/ -- глубина 3 (папка на последнем уровне)
  13. На вход программе передаётся путь к папке (в виде строки, например '/home/username/').

    Напишите функцию, которая выводит на экран пути ко наиболее "глубоко" лежащим элементам ("листьям") - это могут быть и файлы и папки (все возвращённые программой пути должны иметь одну глубину -- максимальную).

    Подсказка:
    Ваша рекурсивная функция (решающая задачу) должна возвращать массив путей, а случае если корневая папка окажется пустой, этот массив должен быть тоже пустым.