По сути An = 1+2+3+4+5....n это же сумма членов арифметической прогрессии.
Есть ли способ решить данную задачу не циклом, а рекурсивно, вызывая метод из самого себя?
Я накостылил метод, который использует цикл, а потом вызывает сам себя и это сработало, но может есть более "элегантные" пути решения без использования цикла?
Fedor
16 уровень
Есть ли способ решить рекурсией?
Решен
Комментарии (10)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
BigBrain
26 октября 2018, 02:52
0
Ярослав Java Developer Master
21 апреля 2018, 08:35
Для такой задачи рекурсия как раз и не нужна, и может только переполнение стэка вызвать.
0
Roman Pryshchepa Java Developer Expert
23 апреля 2018, 15:51
Если правильно использовать, то переполнения не будет.
+1
Ярослав Java Developer Master
23 апреля 2018, 18:38
Можно пример? :) Такой, чтобы спокойно работал с n = 1,000,000 минимум :)
0
Roman Pryshchepa Java Developer Expert
24 апреля 2018, 08:05
А это уже, наверное, ограничение использования рекурсии :) У меня и при 100 000 переполнение идет.
0
Ярослав Java Developer Master
24 апреля 2018, 15:08полезный
В этом и суть, что рекурсия для данной задачи не нужна, потому что при n > 10 000 (или сколько там ограничение на стэк в жаве, я только в Си помню) уже будет переполнение. Рекурсия используется при повторении каких-то однотипных и сложных действий, тут же достаточно цикла, потому что работа с числами.
+1
Александр Круль
25 декабря 2018, 22:51
а нельзя использовать return, при достижении 5, чтоб выйти из рекурсии?
0
--------Master
21 апреля 2018, 08:34полезный
Метод сум (x) {
Если x равно 1, вернуть 1, иначе вернуть x + сум (х - 1)
}
Вроде сходу что-то такое набрасывается в голове))
+4
TheDIP
13 октября 2018, 20:40
Может тупой вопрос, но я не оч понимаю какое значение принимает метод вызванный внутри себя. Как это работает?
0
--------Master
13 октября 2018, 20:50
То значение, которое ему передается при вызове, особой разницы с вызовом из любого другого метода в этом плане нет: точно так же при вызове в методе создаются переменные, объявленные в качестве параметров метода, этим переменным присваиваются значения, указанные при вызове в скобках
0