Почему результат выводится inf?
пс. факториал считается правильно.. проверяла. проблема именно в сумме ряда.
Проверьте еще раз, например на таком примере: factorial(36)
Вспомним, что факториал - число большое, а в int влезает не так много. А что у нас там является результатом знакового переполнения в C++, напомните?
У нас тут переполнение, 36! не влезает в тип int. Сделайте хотя бы double.
Inf («машинная бесконечность») — обычно результат дробного деления на ноль. Почему? Посчитаем, сколько двоек в 36!
Делятся на 2 — 18 сомножителей.
И ещё на 4 — 9 шт.
И ещё на 8 — 4 шт.
И ещё на 16 — 2 шт.
И ещё на 32 — 1 шт.
Итого в составе 36! будет 34 двойки, то есть 36! делится на 234. Разумеется, целочисленная арифметика, работающая в кольце остатков от деления на 232, даст ноль. При этом, разумеется, 32-битный регистр многократно и безнадёжно переполнится.
Более сложный способ расчёта ряда — рекуррентное соотношение. Очередное слагаемое поделим на две части: ai = (2i)! / i²! и bi = |x| / i²!. Постройте, как соотносятся ai−1 и ai, аналогично для b.