He construido una función recursiva para calcular los valores del triángulo de Pascal.Pascal Triangle Recursive Program Optimization en C++
¿Hay alguna manera de optimizarlo?
recordatorio cortos sobre el triángulo de Pascal: C (n, k) = C (n-1, k-1) + C (n-1, k) Mi código es:
int Pascal(int n, int k) {
if (k == 0) return 1;
if (n == 0) return 0;
return Pascal(n - 1, k - 1) + Pascal(n - 1, k);
}
La ineficiencia Lo que veo es que almacena algunos valores dos veces. Ejemplo: C (6,2) = C (5,1) + C (5,2) C (6,2) = C (4,0) + C (4,1) + C (4, 1) + C (4,2) llamará C (4,1) dos veces
¿Alguna idea de cómo optimizar esta función?
Gracias
Creo que este es un problema clásico con recursividad su visión, en lugar de volver a calcular estos valores se debe almacenar en una "mesa", como estructura de datos a continuación, en lugar de volver a ejecutar la función que hace una búsqueda en la tabla. Precisamente lo que ha identificado, la superposición de llamar a la función con el mismo valor es un desperdicio del tiempo de procesamiento (transacción clásica de tiempo de proceso/memoria desactivada). No tengo una solución directa para esto, pero definitivamente tienes la idea correcta. – shaunhusain
Una optimización menor es devolver 1 cuando n == k, esto aumentará la velocidad de 'O (Suma (C (n, i) para i de 0 a k))' a 'O (C (n, k)) '. – Neil
@shaunhusain gracias, está claro, ¡asignaré algo de memoria! @Neil buena idea también. – JohnG