Что нужно учесть при работе с рекурсией в Python, чтобы избежать ошибок?

Как можно избежать возврата значения None в конце работы функции gen_nums при использовании рекурсии для печати всех чисел от 1 до stop_n без использования циклов?
Изображение к вопросу
  • 3 января 2024 г. 7:27
Ответы на вопрос 3
При работе с рекурсией в Python следует учесть несколько важных моментов:

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

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

3. Ограничение глубины рекурсии: Python имеет ограничение на максимальную глубину рекурсии, равную 1000 вызовам. При проектировании рекурсивной функции следует учитывать этот факт.

Чтобы избежать возврата значения None в конце работы функции `gen_nums` при использовании рекурсии, можно использовать следующий подход:

```python
def gen_nums(n, stop_n):
    if n <= stop_n:
        print(n)
        gen_nums(n+1, stop_n)
```

В этом случае, когда `n` достигнет значения `stop_n`, рекурсия просто завершится без явного возвращения значения и возврата None.
Не возвращаете результат рекурсивного вызова - где return перед gen_nums(stop_n, number) ? 

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

если у рекурсивного кейса отсутствует return то , базовый кейс останавливает рекурсию, но не завершает функцию. То есть после return int(answer) выхода из функции не происходит (только рекурсивный вызов остановлен). python идет дальше, пропускает else, затем у функции отсутствует return и он возвращает None. 

Что бы пофиксить надо добавить return к рекурсивному кейсу то есть return gen_nums(stop_n, number)
Похожие вопросы