Así sería calcular el factorial en un simple bucle (es decir pasado a iterativo):
Código:
j = 10 // factorial entre 1 y 10
n = 1
bucle para k desde 2 a j // si 'j' fuere 0, ó 1 todavía arrojará el valor correcto con n = 1
n = (n * k)
fin bucle
Ahora bien, dado que estás usando el factorial dentro de un bucle, vas a calcular innumerables veces el factorial de un número, incluso muchas veces podría ser el mismo valor, más aún, si luego la función que usa dicho bucle es llamada múltiples veces, resultará que estás ejecutando casi todo el tiempo el factorial de un número en vez de hacer otras cosas...
...en tales situaciones es mejor pre-calcular una úncia vez el factorial para cada número hasta el máximo, y guardarlo en un array, así luego basta tomar el iésimo valor del array.
Si la función se llamara una única vez, bastaría precalcularlo al entrar en la propia función, pero si la función fuere invocada múltiples veces entonces es mejor precalcularla al inicializar el componente de código del que forma parte.
Nótese que con apenas el factorial de 16 ya arroja: 20.922.789.888.000, es decir algo más de 2^44... así que el array tendrá un tamaño relativamente pequeño. es decir consumirá muy poca memoria, tan poca que incluso los lenguajes podrían tenerlo como constantes (para 32 bits, basta llegar hasta el factorial de 12).
Código:
array de int factoriales() // en realidad dimensionar el array al número de indices que deba contener como máximo...
funcion PrecalcularFactorial(int x)
int k, n
n = 1
factoriales(0) = n
factoriales(1) = n
bucle para k desde 2 a x
n = (n * k)
factoriales(k) = n
fin bucle
fin funcion
Ahora cuando tengas que usarlo...en vez de ser una llamada a una función o una ejecución en un bucle, será una dirección de memoria que ya contiene el valor...
Código:
...
cos += pow(-1,exponente) * pow(x,i)/factoriales(i);
...