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

Ошибка в №3696

DimaVan: Ответ 131 скорее всего ошибочный, рекурсивная функция для этого возвращает 976 Правильным же ответом будет число 161 (для которого значение рекурсии будет 1093) Решение на ЯП Java private void solve() { System.out.println(evalRec(131)); //976 } private long f(long n) { if (n <= 5) { return n; } else { if (n % 5 == 0) { return n + f(n / 5 + 2); } return n + f(n + 6); } } private boolean canBeCalc(int val) { try { f(val); } catch (StackOverflowError e) { return false; } return true; }

Ответов - 3

Поляков: DimaVan пишет: return n + f(n / 5 + 1); Спасибо, условие исправлено.

nuriatalgatovna@gmai: def F(n): if n<=5: return n elif n % 5 == 0: return n + F(n / 5 + 1) else: return n + F(n + 6) for i in range(1, 1000): if F(i) > 1000: print(i) break Программа выдает ошибку: if n<=5: RecursionError: maximum recursion depth exceeded in comparison Можем ли мы обойти переполнение стека? Или задачу лучше не решать через перебор вариантов i?

Поляков: nuriatalgatovna@gmai пишет: RecursionError: maximum recursion depth exceeded in comparison Можем ли мы обойти переполнение стека? Или задачу лучше не решать через перебор вариантов i? Есть несколько вариантов: 1) перехватить исключение по ошибке "Переполнение стека" (см. программу на Java выше). 2) ввести свой счетчик рекурсивных вызовов, если он превышает заданное значение, делать вывод о том, что рекурсия для этого значения i не остановится и останавливать ее вручную. 3) теоретически посмотреть, при каких значениях рекурсия заканчивается, и только эти значения рассматривать.




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