последовательность с рекурсией и без нее
-
19-09-2019 - |
Вопрос
У меня есть последовательность.
a1 = 1 - cos(x);
ai = a1 + (-1)^(i-1) * x^(2*i-2) / (2*i-2)!
Мне нужно написать это с рекурсией и без нее.Но у него другие результаты.
Вот мой код: http://codepaste.net/q213q6
Решение
Я буду исходить из того, что это домашнее задание, если я ошибаюсь, то вернусь и отредактирую этот пост или сделаю репост.
Во-первых, вам следует попытаться написать функцию факториала хвостовой рекурсией.Хотя в C это, вероятно, не будет иметь большого значения, это хорошая практика.
int helper( int x, int acc ) {
if( x == 0 ) {
return acc;
}
else {
return helper( x - 1, acc * x );
}
}
int factorial( x ) {
helper( x, 1 );
}
Далее, вы, как правило, не хотите помещать цикл внутри своих рекурсивных функций, что несколько противоречит сути.Думайте о рекурсивном вызове как об одной итерации с проверкой и либо возвратом, либо отзывом.
Другие советы
Поскольку вы выполняете арифметику с плавающей запятой.Разные способы реализации могут давать разные результаты.В вашем случае я могу вспомнить одно место, где были понесены убытки.
currC = pow(x, 2*i-2);
не равен
47: currC = currC * x * x;
Для дополнительной информации,http://en.wikipedia.org/wiki/Floating_point#Multiplication