УПРАЖНЕНИЯ НА РЕКУРСИЮ
Сюда будут добавляться задачи. Но не так быстро как могло бы хотеться. Мне на рекурсию сложно искать разнородные задачи, несмотря на множество рекурсивных решений. Это все-таки для начала понимания рекурсии, поэтому очень легкие не охота вписывать, а те, что с деревьями и графами не для самых начинающих. Поэтому буду выискивать что-то между очень легким и сложными структурами данных. Если в задаче дописаны дополнительные условия, значит они относятся только к этой задаче, но не к другим (Одна стрелочка — одна задача)
Пока задач мало, но мало лучше чем ничего.
Предлагаемые здесь упражнения на рекурсию требуют таких решений, в которых никаких циклов не будет использоваться. (goto, for, while и др циклы запрещаются). Разрешается использовать что-то из языка, в чем могут быть прописаны эти циклы (но мы-то об этом не знаем). Т. е. разрешено использовать любые встроенные функции языка. Не разрешается использовать глобальных переменных.
- Оставить в строке между словами ровно по одному пробелу. (т.е. если строка содержит несколько пробелов подряд, то заменить все это множество пробелов только одним пробелом)
Пример (пробелы в примере для наглядности сейчас символы подчеркивания)
"String___________test___one______________this"
должно стать
"String_test_one_this"
На вход в функцию подается только строка. (Если память выделяется с помощью new, то Строка и длина строки). static использовать запрещено.
- Выполните поиск элемента в массиве. Для поиска элемента используйте рекурсивную функцию. В случае, если элемент не найден, выдавать сообщение об отсутствии. Используйте обычный одномерный массив целочисленных значений
- (Поиск наименьшего значения в массиве) Напишите рекурсивную функцию, которая принимает массив и размер массива как аргументы и возвращает наименьший элемент массива. Функция должна прекращать свою работу и возвращаться, если принимаемый массив имеет один элемент.
- Определить является ли строка палиндромом
Палиндром — это строка, которая читается одинаково слева-направо и справа-налево
- Разворот числа
Дано число n, десятичная запись которого не содержит нулей. Получите число, записанное теми же цифрами, но в противоположном порядке.
При решении этой задачи нельзя использовать циклы, строки, списки, массивы, разрешается только рекурсия и целочисленная арифметика.
Фунция должна возвращать целое число, являющееся результатом работы программы, выводить число по одной цифре нельзя.
начало 1. Я ожидаю какие-нибудь рекомендации, но это пока отсутствует
Рекурсивные функции имеет смысл, из соображений получения эффективного кода использовать только тогда, когда рекурсия содержится в самих данных. Типичными примерами являются действительно деревья, а также, например, поиск файлов по заданному пути. По крайней мере я бы сказал, что приведенные задачи являются исключительно учебными, как и классический пример вычисления факториала с использованием рекурсивной функции, а не простого цикла.
Алгоритмы на графах.
Функциональное программирование (парадигма) и его жалкие подобия.