30:24 - можно так записать?: int f(int n) { if((n == 0) || (n == 1)) return n; return f(n-1) + f(n-2); } Буквально пару часов назад читал про арифметику(Столяров А.В. - Программирование: введение в профессию. Системы и сети(ДМК Пресс, 2021); стр.44-46)
А когда узнал про приоритеты операций, то так бы записал: int f(int n) { if(n == 0 || n == 1) return n; return f(n-1) + f(n-2); } Читать там же, но стр.52
Тут суть немного в другом. Сама концепция языков с функциональной парадигмой пытается придерживаться принципа не иметь состояний. Из этого следует то, что в чисто функциональных языках как таковых переменных не существует (а точнее такие языки пытаются избегать их) и соответственно не существует циклов, так как они расчитаны на изменение состояний. Единственный подход в таких языках - это рекурсия, но и здесь стоит сказать, что рекурсия должна быть хвостовая (если это возможно), и тогда на уровне компиляции в машинный код будет генерироваться не рекурсивная функция, а функция с итерациями, то-есть имеющая обычный цикл (язык должен обладать поддержкой хвостовой рекурсии. Почти все функциональные языки обладают данной поддержкой). Также стоит сказать, что если мы рассматриваем рекурсию относительно циклов, то цикл является лишь подмножеством рекурсии. Иными словами, при помощи рекурсий можно реализовать любой цикл, но нельзя реализовать при помощи циклов любую рекурсию.
Спасибо за твой труд!
30:24 - можно так записать?:
int f(int n) {
if((n == 0) || (n == 1))
return n;
return f(n-1) + f(n-2);
}
Буквально пару часов назад читал про арифметику(Столяров А.В. - Программирование: введение в профессию. Системы и сети(ДМК Пресс, 2021); стр.44-46)
А за видео - благодарю!)
А когда узнал про приоритеты операций, то так бы записал:
int f(int n) {
if(n == 0 || n == 1)
return n;
return f(n-1) + f(n-2);
}
Читать там же, но стр.52
Cи теперь високоуровневая?)
Яп без циклов оО
Это предусмотрено в угоду памяти? Даже в простеньких скриптовых яп есть циклы.
Тут суть немного в другом. Сама концепция языков с функциональной парадигмой пытается придерживаться принципа не иметь состояний. Из этого следует то, что в чисто функциональных языках как таковых переменных не существует (а точнее такие языки пытаются избегать их) и соответственно не существует циклов, так как они расчитаны на изменение состояний. Единственный подход в таких языках - это рекурсия, но и здесь стоит сказать, что рекурсия должна быть хвостовая (если это возможно), и тогда на уровне компиляции в машинный код будет генерироваться не рекурсивная функция, а функция с итерациями, то-есть имеющая обычный цикл (язык должен обладать поддержкой хвостовой рекурсии. Почти все функциональные языки обладают данной поддержкой).
Также стоит сказать, что если мы рассматриваем рекурсию относительно циклов, то цикл является лишь подмножеством рекурсии. Иными словами, при помощи рекурсий можно реализовать любой цикл, но нельзя реализовать при помощи циклов любую рекурсию.