Можно ли использовать рекурсию для итерации по циклу?

  • 6 августа 2023 г. 7:10
Ответы на вопрос 2
Да, это возможно. Рекурсия может быть использована для итерации по циклу, но часто это не нужно делать, так как для этой цели есть более эффективные методы.
x - равно 0 в твоем коде. Попробуй переместить команду print(x) в самое начало и посмотри, что произойдет. Рекурсия - это когда функция вызывает саму себя без остановки, пока не будет достигнуто базовое условие (одно или несколько условий). Ты видишь None в конце потому, что команда print возвращает значение None, и именно это возвращается в самом конце выполнения кода. Если ты хочешь, чтобы функция прекратила выполнение, замени команду return на pass. Таким образом, получишь бесконечную рекурсию. Ошибка с выводом None возникает, если используется конструкция print(print(1)).
После обсуждения с Zzzz9 стало понятно, что я был неправ относительно None. Базовый случай при рекурсии прекращает рекурсию, но не выходит из функции. Чтобы возвращать значение базового случая, нужно добавить команду return в рекурсивный случай. Например:

def f(x):
    if x == 0:
        return 100
    else:
        f(x - 1)

print(f(3))

В этом случае рекурсия остановится, но рекурсивный случай не вернет никакого значения, поэтому функция вернет None. Однако, если добавить return к рекурсивному случаю:

def f(x):
    if x == 0:
        return 100
    else:
        return f(x - 1)

print(f(3))

То функция вернет 100. Ошибка с выводом None в случае с командой print была полной глупостью с моей стороны. Она просто возвращает None, и я ошибочно подумал, что это имеет какое-то значение. Когда мы добавляем return к рекурсивному случаю, функция вернет значение базового случая.

Относительно цикла: если мы добавим return к рекурсивному случаю, то цикл for выполнится только один раз, потому что базовый случай остановит рекурсию, а рекурсивный случай вернет значение, которое возвращается в базовом случае. Например:

def f(x):
    print(x)
    if x == 0:
        return 'Конец'
    for i in range(10):
        return f(x - 1)

print(f(3))

Цикл выполнится только один раз, затем произойдет выход из функции.
Похожие вопросы