последовательность с и без рекурсии - PullRequest
0 голосов
/ 11 марта 2010

У меня есть последовательность.

a1 = 1 - cos(x);
ai = a1 + (-1)^(i-1) * x^(2*i-2) / (2*i-2)!

Мне нужно написать это с рекурсией и без нее. Но у него другие результаты.
Вот мой код: http://codepaste.net/q213q6

Ответы [ 2 ]

1 голос
/ 11 марта 2010

Я собираюсь действовать при условии, что это домашняя работа, если я ошибаюсь, я вернусь и отредактирую этот пост или репост.

Во-первых, вы должны попытаться написать свою факториальную функцию в хвостовой рекурсивной манере. Хотя это, вероятно, не будет иметь большого значения в 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 );
}

Далее, вы, как правило, не хотите помещать цикл в свои рекурсивные функции, что несколько отрицательно сказывается на этом. Подумайте о рекурсивном вызове как об одной итерации с тестом, и вы можете либо вернуться, либо вспомнить.

0 голосов
/ 11 марта 2010

Поскольку вы выполняете арифметику с плавающей запятой. Разные способы реализации могут давать разные результаты. В вашем случае я могу вспомнить одно место, где понесены убытки

currC = pow(x, 2*i-2);

не равно

  47:          currC = currC * x * x;

Для получения дополнительной информации, http://en.wikipedia.org/wiki/Floating_point#Multiplication

...