Форум » Рекурсивные процедуры и функции » № 16 ошибка рекурсии » Ответить

№ 16 ошибка рекурсии

Hecker: Проблемы в решении 16 номера. Вот один из них. 75) Алгоритм вычисления функции F(n), где n – целое число, задан следующими соотношениями: F(n) = n, при n <= 1, F(n) = 1 + F(n / 2), когда n > 1 и чётное, F(n) = 1 + F(n + 2) , когда n > 1 и нечётное. Назовите минимальное значение n, для которого F(n) = 16. Запускаю программу, выходит ошибка рекурсии. Вот программа: def F(n): if n <= 1: return n elif n > 1 and n % 2 == 0: return F(n // 2) elif n > 1 and n % 2 != 0: return 1 + F(n + 2) for n in range(1, 1000): if F(n) == 16: print(n) Решал на листочке. Не получилось решить, так как рекурсия ссылается на большее число. Мне кажется, что ошибка в задаче, а именно в строчке return 1 + F(n + 2) Если я в проге пеняю + на -, то все выходит. А если возвращаю +, то получаю ошибку: RecursionError: maximum recursion depth exceeded in comparison

Ответов - 1

Поляков: Да, в этой задаче рекурсия в некоторых случаях бесконечная. Эти случаи рассматривать не нужно. Ответ на вопрос "что делать" можно найти здесь.



полная версия страницы