На этом форуме отвечают на конкретные вопросы. Фраза «я не понимаю, как решать» — это не вопрос. На вопрос «как решить задачу №X» вас отошлют к материалам сайта kpolyakov.spb.ru. За бессвязный поток слов и неспособность формулировать свои мысли — бан.

Если у вас не сходится ответ на какую-то задачу, пожалуйста сразу представляйте свое «правильное» решение.
Программы "заворачивайте" в тэг [pre2]...[/pre2], при этом сохраняются все отступы и применяется моноширинный шрифт. Если у вас используется сочетание "[i]" для обозначения элемента массива или строки, ставьте пробел после открывающей скобки. Иначе система выделит все дальнейшее курсивом.

Для регистрации на форуме щелкните по ссылке «Вход-регистрация» вверху страницы. В открывшееся окошко «ник» введите свою фамилию на русском языке (например, Иванов). В окошко «пароль» введите придуманный вами пароль, состоящий из латинских букв и цифр. Поставьте галочку в окошке «зарегистрироваться, я новый участник» и нажмите кнопку «ОК».

АвторСообщение



Не зарегистрирован
ссылка на сообщение  Отправлено: 19.02.21 16:32. Заголовок: Ошибка в №3696


Ответ 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;
}

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 3 [только новые]


Администратор




Сообщение: 2473
ссылка на сообщение  Отправлено: 19.02.21 17:42. Заголовок: DimaVan пишет: retur..


DimaVan пишет:
 цитата:
return n + f(n / 5 + 1);

Спасибо, условие исправлено.

___________________________________________________
Имей мужество пользоваться собственным умом. (И. Кант)
Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 2
ссылка на сообщение  Отправлено: 26.02.21 20:58. Заголовок: Подскажите пожалуйста как можно доработать программу?


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?

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Сообщение: 2509
ссылка на сообщение  Отправлено: 26.02.21 21:07. Заголовок: nuriatalgatovna@gmai..


nuriatalgatovna@gmai пишет:
 цитата:
RecursionError: maximum recursion depth exceeded in comparison Можем ли мы обойти переполнение стека? Или задачу лучше не решать через перебор вариантов i?

Есть несколько вариантов:
1) перехватить исключение по ошибке "Переполнение стека" (см. программу на Java выше).
2) ввести свой счетчик рекурсивных вызовов, если он превышает заданное значение, делать вывод о том, что рекурсия для этого значения i не остановится и останавливать ее вручную.
3) теоретически посмотреть, при каких значениях рекурсия заканчивается, и только эти значения рассматривать.

___________________________________________________
Имей мужество пользоваться собственным умом. (И. Кант)
Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 1176
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет