Ответы пользователя по тегу Рекурсия
  • Как работают рекурсии?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    В данном случае происходит примерно следующее:
    x=1
      print(1) <- if ветка и рекурсия
      x=2
        print(2) <- if ветка и рекурсия
        x=3
          print(3) <- if ветка и рекурсия
          x=4 
          print(4) <- мимо if - работает вторая часть функции
        print(3)
      print(2)
    print(1)

    Т.е., сначала в функции отрабатывает ветвь за if три раза, а потом вторая ветвь четыре раза в обратном порядке.
    Если заменить рекурсию на саму функцию, то в данном случае получится следующий код (упрощенно):

    def func(x1): # функция #1
        if x1 < 4:
            print(x1) # 1
    
            x2 = x1 + 1 # функция #2
            if x2 < 4:
                print(x2) # 2
    
                x3 = x2 + 1 # функция #3
                if x3 < 4:
                    print(x3) # 3
    
                    x4 = x3 + 1 # функция #4
                    print(x4) # 4 
    
                print(x3) # 3, функция #3 - конец
            print(x2) # 2, функция #2 - конец
        print(x1) # 1, функция #1 - конец
    Ответ написан
    3 комментария
  • Как реализовать рекурсивный поиск в bash?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Например любой из вариантов:
    • Указать полный путь к файлу
    • Вычислить путь к файлу относительно текущего каталога и указать его
    • Добавить алиас для скрипта
    • Добавить путь к скрипту в PATH
    • Определить функцию с рекурсией и вызывать её, передавая нужные параметры как аргументы
    Ответ написан
  • Зачем нужна рекурсия в реальных случаях?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Если простыми словами, то рекурсия - это просто вызов функции внутри неё самой. Используется, например, для прохода по группе связанных структур с несколькими связями, например деревьев или графов. Очень удобно работать со структурами любой глубины вложенности.

    Пока что мой мозг видит рекурсию как обычный цикл, только задом наперед.

    Неправильно видит. "Зад" и "перед" не имеют к этому отношения. Цикл - это строгий вызов подпрограммы/куска кода со счетчиком и условием либо просто с условием и без необходимости объявлять отдельную функцию. Цикл работает пока соблюдается условие и изнутри цикла код влияет только на условие, в большинстве ЯП есть выход из цикла. В рекурсии же нету ни условий ни счетчиков - это все остается на выбор программиста. Это более низкий уровень в сравнении с циклом. Если цикл это строгое решение под определенные задачи, то рекурсия - это более гибкое и универсальное решение. И то и то нужно и используется в различных ситуациях.
    Ответ написан
  • Как рекурсивно получить примитивные свойства вложенных объектов?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    function getProp(o) {
        var result = [];
        for(var prop in o) {
            if(typeof(o[prop]) === 'object') {
                result = result.concat(getProp(o[prop]));
            }
        }
        return result;
    }
    Ответ написан
    Комментировать