Pregunta

decir que hay una función para calcular factorial (n)

¿Factorial (7) crea 7 objetos de función para cada uno de n de 1 a 7

y use esos valores cuando sea necesario (para factorial (8) como factorial (7) * 8)

¿Fue útil?

Solución

Depende del idioma y la implementación del idioma.

En muchos lenguajes funcionales (por ejemplo, Haskell), se garantiza que una función no cambiará nada; solo para devolver un valor. Esta falta de efectos secundarios permite que el lenguaje recuerde / guarde en caché o "memorice" los resultados de las llamadas a funciones.

En un lenguaje menos sofisticado, se pueden colocar 7 marcos de llamadas de funciones distintas en la pila y desplegarse.

Una función factorial escrita correctamente en muchos lenguajes funcionales también sería recursiva de cola; en ese caso, el idioma podría elegir simplemente saltar de la parte inferior de la función a la parte superior para evitar crear otra llamada a la función. En este caso, el lenguaje está convirtiendo la función recursiva en un bucle "gratis".

Otros consejos

Depende, parece que estás hablando de una función factorial recursiva:

int factorial(int n) {
    return n>=1 ? n * factorial(n-1) : 1;
}

Esta función se invocará a sí misma recursivamente la cantidad de veces necesaria para calcular el factorial dado (n).

La mayoría de las funciones recursivas se pueden transformar en una solución iterativa mediante el uso de una pila para acumular los resultados consecutivos ...

int factorial(int n) {
    int accu = 1;
    int i;
    for(i = 1; i <= n; i++) {
        accu *= i;
    }
    return accu;
}

Puede. Lo que está preguntando suena como memoración : almacena los resultados anteriores para acelerar los cálculos más adelante. Entonces, por ejemplo, si calculas 9 !, puedes almacenar los valores para 1! .. 9 !, y si te piden 8! luego puede devolver el valor almacenado. Del mismo modo, si se le pide 10 !, puede calcular 10 & # 215; 9! rápidamente.

El factor es que el factorial ( n ) crece muy rápido, para valores grandes de n puede terminar usando mucho almacenamiento, por lo que el comercio espacio-tiempo puede no valer la pena.

Otra función que puede usar la memorización de manera efectiva es calcular los números de Fibonacci.

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