Рекурсія - як ми всі знаємо - одна з тих проблем - те, що обернути голову, відчуває, як досягти "рубіж" у вашому плановому плаванні.
Але коли мова йде про фактичне використання його в проблемах реального світу - знання механіки рекурсії НЕ достатньо - треба також зрозуміти природу проблем, де рекурсія є найбільш підходящим рішенням.
Тож моє запитання таке ...
- які "схеми проблем" вимагають вирішення рекурсії
- це рекурсія, форма стратегії "ділити і перемагай" або форма "повторного використання коду" - або, сама по собі, модель дизайну.
- чи можете ви навести приклад реальної світової проблеми, коли рекурсія приходить в голову як негайне рішення
- ОНОВЛЕННЯ -
багато відповідей стосуються "справжніх проблем", як обходу дерев, факторіалізмів тощо. Я вважаю за краще "РЕАЛЬНІ реальні проблеми" - дозвольте навести вам приклад ...
У нас був ВЕЛИКИЙ патрон тексту (близько 30 Мб тексту як пов'язаний список structs
), і нам потрібно було зробити його індекс для повного пошуку тексту. Нам потрібно було зберігати весь індекс у пам’яті та повторно індексувати текст кожні 10 хвилин.
Кожні 10 хвилин ми б порівнювали весь текст (два пов'язані списки, рядок за рядком) з новоствореним фрагментом тексту - щоб побачити, який рядок було змінено - і тоді ми повторно індексуватимемо лише цей рядок - таким чином нам не вдасться повторно індексувати цілий текст. Пам'ятайте - нам потрібно було знайти точки різниці між двома списками, пов’язаними з 30 Мб.
Один з моїх колег придумав фантастичну програму, яка використовувала ГОЛОВНУ рекурсію для порівняння ліній - а потім збирала позиції, де патрони відрізнялися масивом - так, я знаю, це звучить спантелично - як тут може допомогти рекурсія - але це було.
Справа в тому, - як він міг бачити, що ця проблема може бути вирішена розумно при інтенсивному використанні рекурсії?