¿La recursividad es más rápida que los bucles en MATLAB?

Como en todo lo técnico, generalmente dirijo a las personas a StackOverflow para que hagan la misma pregunta (Preguntas más recientes de ‘matlab’), y allí se aborda este tema aquí:

– Eficiencia: recursividad vs bucle

Por lo general (como indica la respuesta principal), los bucles son más eficientes (memoria, velocidad), mientras que la recursión mantiene sus algoritmos más simples en cuanto a código. Más allá de eso, con la recursividad, tendrás todo tipo de problemas de localización de datos (volar tus cachés de CPU y la puesta en escena de datos de tu GPU) que hacen que esto sea aún más cierto.

En general (no solo Matlab) esta respuesta también es cierta:

– Recursion or Loops (Iteration), cuando se trata de rendimiento, ¿cuál puede ejecutarse más rápido que el otro y qué enfoque se adapta mejor o más conveniente para el hardware?

Y la recursión tomará (como habrás notado) más memoria (es por eso que obtienes una gran cantidad de memoria caché).

Ahora esa respuesta es: “en general”. He oído hablar de casos, en Matlab, donde la recursividad es más rápida, y para eso todo lo que puedo hacer es encogerme de hombros y decir “¡eh!”.

Es posible que desee considerar echar un vistazo a SciPy (aunque reconoce que la recursión de la cola en Python generalmente se considera doblemente buena por varios miembros de esa comunidad). Anaconda es una buena distribución, pero el soporte de GPU requiere una licencia comercial:

-Anaconda

Recientemente escribí una función recursiva en Matlab para extraer todas las secuencias posibles no crecientes de una longitud específica my límite específico n (y luego apliqué alguna prueba sobre ellas).

Como rápidamente tardé mucho tiempo cuando aumenté myn, decidí reescribirlo de una manera no recursiva basada en la pila para ver si se ejecuta más rápido, y el resultado fue que: El código no recursivo era órdenes de magnitud ” más lento ” !! Así que volví al código recursivo e intenté dar marcha atrás …
Por supuesto, fue mi experiencia específica y es posible que veas algo diferente en función de tu código, …

More Interesting

Cómo reconocer un problema como un problema de programación dinámica

¿Qué algoritmos son buenos candidatos para el reconocimiento de sonido? Estoy principalmente interesado en reconocer sonidos en un entorno doméstico, por ejemplo, un temporizador de microondas que suena, un teléfono que suena, un timbre, etc.

Cómo encontrar diferentes permutaciones de pila

Me acabo de unir a TopCoder porque quiero aprender las estructuras de datos y cómo codificarlas en C, pero no tengo idea de dónde comenzar en TopCoder ya que puedo ver 3 categorías en el sitio, pero no pude encontrar la forma correcta. ¿Qué debo hacer para comenzar?

¿Cuál es la diferencia entre el algoritmo memético y el algoritmo genético?

¿Cuáles son algunos diseños de clase mínima para el diseño de elevadores para la construcción de m pisos?

Dada una matriz S de n enteros, ¿hay elementos a, b, c en S tales que a + b + c = 0? ¿Encuentra todos los tripletes únicos en la matriz que da la suma de cero?

¿Por qué se utilizan montones para la asignación de memoria? ¿Por qué no se utilizan pilas ni ninguna otra?

Cómo restar enteros usando un algoritmo

¿Cuál es la ventaja de buscar en una lista ordenada en lugar de en una lista no ordenada?

Quiero comparar una consulta con varios documentos y asignarles una clasificación. ¿Qué algoritmo necesito usar?

Con los algoritmos de cifrado modernos, ¿es factible que alguien sepa qué algoritmo se utilizó al mirar el texto cifrado?

Cómo resolver este problema sin usar ningún algoritmo de aprendizaje automático

¿Es posible encontrar la identidad de una persona basada solo en el estilo de escritura?

¿Cuáles son las aplicaciones más prácticas (vida cotidiana) del algoritmo de agrupación de k-means? ¿Cómo se ha utilizado exactamente k-means en estas aplicaciones?