При работе с рекурсией в 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.