<a href=https://bugaga.ru/jokes/ target=_blank>прикол</a> в том, что у функции есть одно единственное решение для самого простого частного случая проблемы и если решение не сработало (скажем для более усложнённой проблеммы) тогда мы делим прроблему на на две под пролемы (как буд-то разлогаем выражение на множители) и решаем каждую разложенную по оодельности.
То есть если мы возовим функцию
«Решается?
» для проверки можно ли решить проблему и передаим ей для проверки
«(проблема)
» то тогда если фунция не сможет решить проблему за одно действие — она разложит её на две подпроблемы и вызовит сама себа чтобы решить каждое из подпроблем и так до бесконечности пока она не найдёт точный ответ на вопро решается ли проблема:
да или
нет
Код: Выделить всё
Решается?(проблема)
{
действие;
если_правда (проблема = решена)
{
вернуть ("правду");
завершить_Фунцию;
}
// Если проблема не решилась простым способом то тогда
// Разабьём её на под проблемы и попытаемся решить их точно так же…
разбить проблему на две подпроблемы;
если_правда( Решается?(под_проблема_1) или Решается?(под_проблема_2) )
{
вернуть ("правду");
завершить_Фунцию;
}
в_противном_случаяи
{
вернуть("горе и несчастье");
}
}
В реальности мало где применяются рекурсивные решения. Обычно только для таких задач которые нельзя решить линейным, обыкновенным решением. И на это есть пара весомых аргументов: вызов и выполнение функции значительно медление выполнения базовых команд и в линейных решениях как правило обьём памяти рабочий функции не возрастает, а в рекурсии каждый повторный вызов функции заставляет
копм резервировать для неё такой же обьём памяти (для перемменых).
Пример использования рекурси в — MS Paint`е когда вы
„заливаете“ какое нибудь пространство одним цветом.
Можите сами проверить низкую ефиктивность рекурсии. Создайте новый рисунок с большим разрешением и залейте его одим цветом. Быстро залили? А теперь нарисуйте на нем сложный лабиринтно-образный обьект так, что его площадь будет хотя бы половыину от всего размера но чтоб у него было как можно меньше ровных линий и много муссора — разных пиксилей от, (спрея например), и тогда вам покажеться, что MS Paint тормозит при заливки более меньшой площади.
[off]P.S.
На самом деле действий для решения базовой (фундаментальной) проблемы может быцть более одного.[/off]