Red de conocimiento del abogados - Ley de patentes - ¿Por qué la recursividad es ineficiente?

¿Por qué la recursividad es ineficiente?

En cuanto a la recursividad, alguien mencionó dos puntos:

(1) Presión sobre la capacidad de la pila.

(2) La solución recursiva a problemas individuales y la ineficiencia de su algoritmo.

Comentaré brevemente estos dos factores,

(1) Presión de capacidad en la pila:

Generalmente causada por la profundidad de la recursividad. Por supuesto, los programadores deberían medir y comprender esto al codificar. Para un hilo recién creado en win32, el tamaño de pila predeterminado suele ser 1 MB. Entonces, si su función recursiva tiene una gran profundidad, obviamente los programadores deben anticipar esta situación y evitar riesgos.

Esto es lo mismo que cuando eliges asignar memoria en la pila o en el montón, se tendrá en cuenta el tamaño de la memoria asignada.

Por supuesto, si asigna un gran espacio de pila dentro de la función y define una gran matriz dentro del cuerpo de la función, no requiere una gran profundidad y hará que la pila se desborde. Por supuesto, esto es algo que los propios programadores deberían controlar.

(2) Soluciones recursivas a problemas individuales e ineficiencia del algoritmo.

Esta ineficiencia radica principalmente en el propio algoritmo de este problema. En lugar de recursivamente. Por ejemplo, al encontrar un determinado término de Fibonacci, los subproblemas aparecerán repetidamente en grandes cantidades, lo que resultará en muchos cálculos repetidos. Esto se encuentra en muchos libros de algoritmos y se utiliza para guiar la programación dinámica o los métodos de búsqueda de tablas.

Esto es principalmente un problema de eficiencia del algoritmo en sí, no un problema de recursividad. Este punto debe quedar claro.

(3) Podemos ver que en los algoritmos relacionados con árboles, a menudo hay funciones recursivas.

Por ejemplo, recorra la carpeta y elimine una determinada clave (y todas sus subclaves) en el registro.

Especialmente para el recorrido de preorden y postorden de árboles generales y el recorrido en orden de árboles binarios.

La razón principal de esto es que la definición de árbol es "recursiva":

Un árbol es un nodo que tiene múltiples nodos secundarios, y cada nodo secundario es un árbol.

Podemos ver aquí que las ventajas significativas de la recursividad son la intuición de la descripción de la solución y la simplicidad del código.