@monoget

Что не так с рекурсией?

У меня есть задача:
Пользователь вводит число, stop_n, программа должна вывести все числа от 1 до stop_n. Использовать циклы для решения, запрещено.
По задумке, функция будет вызывать сама себя, каждый раз выводя текущее число, до тех пор пока не дойдёт до stop_n. И это работает. Но в конце она возвращает не stop_n, а None. Мне нужно решить эту проблему.

Мой код:

def gen_nums(stop_num, start_num):
    number = start_num
    if number == stop_num:
        answer = number
        return int(answer)
    else:
        print(number)
        number += 1
        gen_nums(stop_n, number)


stop_n = int(input('Введите число: '))
print(gen_nums(stop_n, 1))
  • Вопрос задан
  • 146 просмотров
Решения вопроса 1
0xD34F
@0xD34F
Не возвращаете результат рекурсивного вызова - где return перед gen_nums(stop_n, number)?

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

def gen_nums(max_num, num):
  if num <= max_num:
    print(num)
    gen_nums(max_num, num + 1)

# или

def gen_nums(num):
  if num >= 1:
    gen_nums(num - 1)
    print(num)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Maksim_64
@Maksim_64
Data Analyst
если у рекурсивного кейса отсутствует return то , базовый кейс останавливает рекурсию, но не завершает функцию. То есть после return int(answer) выхода из функции не происходит (только рекурсивный вызов остановлен). python идет дальше, пропускает else, затем у функции отсутствует return и он возвращает None.

Что бы пофиксить надо добавить return к рекурсивному кейсу то есть return gen_nums(stop_n, number)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы