Что такое хвостовая рекурсия? Душкин объяснит

Поделиться
HTML-код
  • Опубликовано: 3 янв 2025

Комментарии • 24

  • @ИльяПавлов-ч5ы
    @ИльяПавлов-ч5ы 2 года назад +1

    какой красивый почерк! божечкии

    • @dushkin_will_explain
      @dushkin_will_explain  2 года назад

      Был бы ещё красивее, если бы я не спешил.

  • @alexanderskusnov5119
    @alexanderskusnov5119 2 года назад +3

    length это не хвостовая рекурсия, т.к. последняя операция не вызов функции length, а сложение
    То же самое и про map: последняя операция это (:), а не вызов map.

    • @dushkin_will_explain
      @dushkin_will_explain  2 года назад

      Ну они всё равно похожи на хвостовую и могут вычисляться в постоянном объёме памяти же.

  • @kkambucha
    @kkambucha 2 года назад +1

    Спасибо! Интересно. А в clojure списки тоже с рекурсией?

  • @MechanicalFreaks
    @MechanicalFreaks 2 года назад +2

    Мне казалось хвостовая рекурсия должна быть что-то вроде:
    ```
    length a = go a 0
    where
    go [] x = x
    go (_:as) x = go as (x+1)
    ```

    • @dushkin_will_explain
      @dushkin_will_explain  2 года назад +2

      Да, всё так. Это классический вариант - аккумулятор. В следующем своём видео я про это рассказываю.

    • @MechanicalFreaks
      @MechanicalFreaks 2 года назад +2

      @@dushkin_will_explain да, посмотрел)
      Конечно, как мне кажется, спорное решение подавать сначала нехвостовую рекурсию как хвостовую в видео про "хвостовую рекурсию", а после, в другом видео про аккумулятор, сделать оговорку на настоящесть

    • @dushkin_will_explain
      @dushkin_will_explain  2 года назад +2

      @@MechanicalFreaks, увы, это издержки производства.

    • @MechanicalFreaks
      @MechanicalFreaks 2 года назад +1

      @@dushkin_will_explain понятно, но всё равно - Вы молодец)

    • @dushkin_will_explain
      @dushkin_will_explain  2 года назад +3

      @@MechanicalFreaks, благодарю. Стараюсь просвещать наших людей в силу своих сил и способностей.

  • @kkambucha
    @kkambucha 2 года назад +2

    божечки, я в результате копаний с рекурсией пришел к теме эволюции и бифуркационных диаграмм :)

    • @dushkin_will_explain
      @dushkin_will_explain  2 года назад +2

      Это же очень круто! Поздравляю :) Обратите внимание на мои видео по биотехнологиям. Ну и генетические алгоритмы я тоже уже рассмотрел.

  • @alexanderskusnov5119
    @alexanderskusnov5119 2 года назад +1

    Ещё одна оптимизация это build-foldr в цепочке вычислений: там списки вообще не строятся.

  • @alexanderskusnov5119
    @alexanderskusnov5119 2 года назад +1

    Для образца _ фраза "всё, что угодно" подходит и для образца х (переменная). Правильная фраза: "связывания с образцом (то бишь с переменной х) не происходит".

    • @dushkin_will_explain
      @dushkin_will_explain  2 года назад

      Да, точно. Там ещё значение _|_ по-разному обрабатывается, с очевидностью.

  • @alexanderskusnov5119
    @alexanderskusnov5119 2 года назад +1

    Надо было добавить, что компилятор для оптимизации хвостовую рекурсию заменяет циклом (уже на языке C--)

    • @dushkin_will_explain
      @dushkin_will_explain  2 года назад

      Да, не всё помнишь во время записи.

    • @stepperjumpy
      @stepperjumpy 8 дней назад

      @alexanderskusnov5119, вам бы курс записать свой по практическому Хаскелю! Ждем!)

  • @dushkin_will_explain
    @dushkin_will_explain  2 года назад +1

    Все видео по функциональному программированию в одном плейлисте: ruclips.net/video/bPCBb1U56yw/видео.html
    И вы всегда можете обратиться к нам за консультациями.

    • @dushkin_will_explain
      @dushkin_will_explain  2 года назад +1

      А ещё вы можете написать мне в ТГ: @rdushkin