Pregunta

Tengo una secuencia.

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

Tengo que escribir esto con y sin recursividad. Pero tiene un diferentes resultados.
Aquí está mi código: http://codepaste.net/q213q6

¿Fue útil?

Solución

Me voy a operar bajo la suposición de que esta es la tarea, si estoy equivocado voy a volver y editar este post o republica.

En primer lugar, usted debe tratar de escribir su función factorial de manera recursiva cola. A pesar de que probablemente no hará mucha diferencia en C, es una buena práctica.

int helper( int x, int acc ) {
    if( x == 0 ) {
        return acc;
    }
    else {
      return helper( x - 1, acc * x );
    }
}

int factorial( x ) {
  helper( x, 1 );
}

A continuación, por lo general no quiere poner un bucle dentro de sus funciones recursivas, que algo derrotas el punto. Pensar en una llamada recursiva como una iteración con una prueba y la posibilidad de restitución o recuperación.

Otros consejos

Desde que está realizando la aritmética de coma flotante. Las diferentes formas de aplicación pueden producir resultados diferentes. En su caso se me ocurre un lugar donde se incurre en pérdidas

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

no es igual a

  47:          currC = currC * x * x;

Para obtener más información, http://en.wikipedia.org/wiki/Floating_point#Multiplication

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top