KiberMath писал(а):
Андрей АK
Почему вредное?
Во первых, рекурсивные алгоритмы не приспособлены для оптимизации рессурсов.
Мало того что сами они рессурсоёмкие (на каждый вызов процедуры система тратит кучу памяти и скорости), но они не позволяют производить никаких улучшений.
С ростом сложности задачи всё большее количество памяти требуется передавать через стэк - т.е. с увеличением сложности время выполнения возрастает в некой прогрессии.
Кроме того - эту рессурсоёмкость очень трудно оценить - невозможно с первого взгляда догадаться, сколько системе потребуется памяти для такой-то задачи.
Во вторых,
Конечно , зачастую рекурсивный алгоритм выглядит красиво и компактно ... но это может сыграть злую шутку с мозгами и стилем программирования.
Как только вы привыкаете что-то делать при помощи рекурсии, это начинает входить в привычку - даже те задачи, где можно было бы без неё обойтись, вы начинаете решать с помощю рекурсии.
Но если вдруг в вашу логику где-то вкралась ошибка - её иногда трудно обнаружить изучая код рекурсивной программы.
Отладка рекурсивных функций также усложнена.
Рекурсия - она проста и крассива только на небольших и несложных примерах, с увеличением же объёма и сложности она становиться громоздкой и неуклюжей.
А отвыкать уже тяжело - мозги привыкли думать рекурсивно, под конец (когда болезнь совсем запущена) вы уже пытаетесь любой цикл в своей программе заменить рекурсией (циклы уже мозгом не воспринимаются как удачное решение).
Однако, любую рекурсивную программу всегда можно заменить циклом.
Да, приходится использовать массивы считать сколько надо выделить памяти под них ... но ведь чтоб программа хорошо работала всё равно всё это придётся делать.
К тому-же циклы хорошо оптимизируются (в т.ч. рапараллеливаются) , легче отлаживиются, алгоритм предстаёт более явно и наглядно - сразу видны все слабые места и пути оптимизации.
Короче - если хотите писать хорошие программы - никогда не используйте рекурсию.