Я познакомился с функциональным программированием [FP] (используя Scala). Одна вещь, которая выходит из моих первоначальных знаний, заключается в том, что FP сильно зависят от рекурсии. А также, кажется, в чистых FP единственный способ сделать итеративный материал - написать рекурсивные функции.
И из-за интенсивного использования рекурсии, кажется, следующая вещь, о которой должны были беспокоиться FP, были StackoverflowExceptions
, как правило, из-за длительных рекурсивных вызовов. Это было решено путем введения некоторых оптимизаций (оптимизация хвостовой рекурсии в сопровождении стековых кадров и аннотации @tailrec
от Scala v2.8 и далее)
Может кто-нибудь, пожалуйста, просветит меня, почему рекурсия настолько важна для парадигмы функционального программирования? Есть ли что-то в спецификациях языков функционального программирования, которые "нарушаются", если мы делаем итеративно? Если да, то я тоже хочу это знать.
PS: Обратите внимание, что я новичок в функциональном программировании, поэтому не стесняйтесь указывать мне существующие ресурсы, если они объяснят/отвечают на мой вопрос. Также я понимаю, что Scala, в частности, обеспечивает поддержку итеративного использования.