{"id":2776,"date":"2023-06-29T10:35:10","date_gmt":"2023-06-29T10:35:10","guid":{"rendered":"https:\/\/techlib.net\/techedu\/?p=2776"},"modified":"2023-06-29T10:35:10","modified_gmt":"2023-06-29T10:35:10","slug":"recursion-de-cola","status":"publish","type":"post","link":"https:\/\/techlib.net\/techedu\/recursion-de-cola\/","title":{"rendered":"Recursi\u00f3n de cola"},"content":{"rendered":"<p> La recursi\u00f3n es un proceso de repetici\u00f3n de elementos de forma autosimilar. En los lenguajes de programaci\u00f3n, si un programa permite que una funci\u00f3n se llame a s\u00ed misma directa o indirectamente, entonces se llama funci\u00f3n recursiva. Una funci\u00f3n que se llama a s\u00ed misma se dice que es una funci\u00f3n recursiva. <br \/>\n La recursividad se utiliza de varias maneras. Un uso com\u00fan es calcular el factorial de un n\u00famero. El factorial de un n\u00famero es el producto de todos los enteros positivos menores o iguales al n\u00famero. Por ejemplo, el factorial de 5 es 5! = 5 * 4 * 3 * 2 * 1 = 120. <br \/>\n Una funci\u00f3n recursiva es una funci\u00f3n que se llama a s\u00ed misma. Una funci\u00f3n que se llama a s\u00ed misma se dice que es una funci\u00f3n recursiva. La forma m\u00e1s com\u00fan de recursi\u00f3n se conoce como recursi\u00f3n de cola. <br \/>\n En la recursi\u00f3n de cola, la llamada recursiva es lo \u00faltimo que ocurre en la funci\u00f3n. Es decir, la funci\u00f3n se llama a s\u00ed misma, y luego devuelve el resultado de la llamada recursiva. <br \/>\n La recursi\u00f3n de cola se utiliza a menudo para optimizar las funciones recursivas. Cuando se llama a una funci\u00f3n recursiva, se crea un nuevo marco de pila. Este nuevo marco de pila contiene los datos para la llamada recursiva. Si la funci\u00f3n recursiva es recursiva de cola, el viejo marco de pila puede ser reutilizado para el nuevo marco de pila. Esto elimina la necesidad de crear un nuevo marco de pila, y puede ahorrar una cantidad significativa de memoria. <br \/>\n La recursi\u00f3n de cola no es el \u00fanico tipo de recursi\u00f3n. Tambi\u00e9n existe la recursi\u00f3n en cabeza, que es cuando la llamada recursiva es lo primero que ocurre en la funci\u00f3n. Sin embargo, la recursi\u00f3n de cola es m\u00e1s eficiente que la recursi\u00f3n de cabeza, y por lo tanto es m\u00e1s com\u00fanmente utilizada. <\/p>\n<h4> \u00bfQu\u00e9 es una llamada de cola en programaci\u00f3n?<\/h4>\n<p> En inform\u00e1tica, una llamada de cola es una llamada a una subrutina que se realiza como acci\u00f3n final de un procedimiento. Si una llamada de cola puede llevar a que la misma subrutina sea llamada de nuevo m\u00e1s adelante en el curso del programa, se conoce como una llamada de cola recursiva. Muchos lenguajes de programaci\u00f3n soportan llamadas de cola, y las llamadas recursivas de cola generalmente pueden ser reescritas como construcciones de bucle para permitir que el cuerpo de la subrutina se ejecute en un espacio constante. <br \/>\n Las llamadas de cola se utilizan a menudo en algoritmos recursivos, donde pueden reducir la complejidad espacial global del algoritmo de O(n) a O(1). Sin embargo, las llamadas de cola tambi\u00e9n se pueden utilizar en algoritmos no recursivos, donde pueden mejorar el rendimiento al evitar la necesidad de almacenar el estado de la subrutina actual en la pila de llamadas. <br \/>\n En general, una llamada de cola es cualquier llamada a una subrutina que es lo \u00faltimo que hace el llamador antes de regresar. Por ejemplo, el siguiente c\u00f3digo contiene dos llamadas de cola: <\/p>\n<p> int factorial(int n) { <br \/>\n if (n &lt;= 1) { <br \/>\n return 1; <br \/>\n } else { <br \/>\n return n * factorial(n - 1); <br \/>\n } <br \/>\n } <\/p>\n<p> int main() { <br \/>\n return factorial(5); <br \/>\n } <br \/>\n La primera llamada de cola es la llamada a factorial(n - 1) dentro de la cl\u00e1usula else de la funci\u00f3n factorial. La segunda llamada de cola es la llamada a factorial(5) en la funci\u00f3n principal. <br \/>\n Las llamadas de cola pueden ser optimizadas por el compilador en un proceso llamado eliminaci\u00f3n de llamadas de cola. Esta optimizaci\u00f3n se puede realizar cuando el compilador puede probar que la llamada de cola no afectar\u00e1 al valor devuelto por el llamante, y que no es necesario que el llamante realice m\u00e1s trabajo despu\u00e9s de que la llamada de cola regrese. <br \/>\n Cuando se realiza la eliminaci\u00f3n de la llamada de cola, el c\u00f3digo para la llamada de cola se ejecuta en lugar del c\u00f3digo para el llamador, y la <\/p>\n<h5> \u00bfPor qu\u00e9 se llama recursi\u00f3n de cola?<\/h5>\n<p> Cuando una funci\u00f3n se llama a s\u00ed misma como su \u00faltima acci\u00f3n, se llama funci\u00f3n recursiva de cola. La raz\u00f3n por la que se llama \"recursiva de cola\" es porque la llamada recursiva es lo \u00faltimo que ocurre en la funci\u00f3n, por lo que se dice que est\u00e1 \"en la cola\" de la funci\u00f3n. <\/p>\n<p> La recursividad de cola se utiliza a menudo en los lenguajes de programaci\u00f3n funcional, ya que permite una ejecuci\u00f3n muy eficiente de los algoritmos recursivos. En las funciones recursivas de cola, la llamada recursiva es lo \u00fanico que ocurre en la funci\u00f3n, por lo que la funci\u00f3n puede simplemente \"saltar\" al punto del c\u00f3digo donde se realiza la llamada recursiva, sin tener que guardar ninguna informaci\u00f3n de estado. Esto hace que las funciones recursivas de cola sean mucho m\u00e1s eficientes que las funciones no recursivas de cola, que tienen que guardar informaci\u00f3n de estado en la pila de llamadas para recordar a d\u00f3nde tienen que volver despu\u00e9s de que regrese la llamada recursiva. <br \/>\n La recursividad de cola no es lo mismo que la recursividad normal, en la que la funci\u00f3n se llama a s\u00ed misma como primera acci\u00f3n. En la recursi\u00f3n de cola, la funci\u00f3n se llama a s\u00ed misma como su \u00faltima acci\u00f3n. Esto es importante, porque significa que la funci\u00f3n no necesita guardar ninguna informaci\u00f3n de estado antes de hacer la llamada recursiva. La funci\u00f3n puede simplemente \"saltar\" al punto del c\u00f3digo donde se hace la llamada recursiva, sin tener que guardar ninguna informaci\u00f3n de estado. Esto hace que las funciones recursivas de cola sean mucho m\u00e1s eficientes que las funciones recursivas normales, que tienen que guardar informaci\u00f3n de estado en la pila de llamadas para recordar a d\u00f3nde tienen que volver despu\u00e9s de que la llamada recursiva regrese. <\/p>\n<h3> \u00bfQu\u00e9 es una llamada de cola en programaci\u00f3n?<\/h3>\n<p> Una llamada de cola es una llamada a una subrutina que se realiza como acci\u00f3n final de una funci\u00f3n. Si una funci\u00f3n se llama a s\u00ed misma recursivamente, cada llamada recursiva es una llamada de cola. Las llamadas de cola pueden ser optimizadas por los compiladores para que el espacio de la pila utilizado por la funci\u00f3n no se multiplique por el n\u00famero de llamadas recursivas. La optimizaci\u00f3n de las llamadas de cola o la eliminaci\u00f3n de las llamadas de cola es el nombre de esta optimizaci\u00f3n.   \u00bfQu\u00e9 algoritmo se utiliza para la recursi\u00f3n?  El algoritmo utilizado para la recursi\u00f3n es el mismo que se utiliza para cualquier otra forma de bucle, como un bucle while o un bucle for. La \u00fanica diferencia es que en un algoritmo recursivo, el c\u00f3digo que implementa el bucle se escribe como una funci\u00f3n que se llama a s\u00ed misma. <\/p>\n<h3> \u00bfCu\u00e1l es la diferencia entre iteraci\u00f3n y recursi\u00f3n?<\/h3>\n<p> La principal diferencia entre la iteraci\u00f3n y la recursividad es que la iteraci\u00f3n utiliza un bucle para repetir un bloque de c\u00f3digo hasta que se cumpla una determinada condici\u00f3n, mientras que la recursividad implica llamar a una funci\u00f3n a s\u00ed misma repetidamente hasta alcanzar un caso base. <br \/>\n La iteraci\u00f3n se suele utilizar cuando se conoce de antemano el n\u00famero de veces que hay que ejecutar un bloque de c\u00f3digo. La recursi\u00f3n, por otro lado, se utiliza cuando el n\u00famero de veces que una funci\u00f3n necesita ser llamada no se conoce de antemano, y puede ser determinada por la propia funci\u00f3n. <br \/>\n La recursi\u00f3n puede considerarse una forma de iteraci\u00f3n, ya que ambas implican la repetici\u00f3n de un determinado proceso varias veces. Sin embargo, la recursi\u00f3n es a menudo vista como una soluci\u00f3n m\u00e1s eficiente y elegante a ciertos problemas que la iteraci\u00f3n.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>La recursi\u00f3n es un proceso de repetici\u00f3n de elementos de forma autosimilar. En los lenguajes de programaci\u00f3n, si un programa permite que una funci\u00f3n se llame a s\u00ed misma directa o indirectamente, entonces se llama funci\u00f3n recursiva. Una funci\u00f3n que se llama a s\u00ed misma se dice que es una funci\u00f3n recursiva. La recursividad se &#8230; <a title=\"Recursi\u00f3n de cola\" class=\"read-more\" href=\"https:\/\/techlib.net\/techedu\/recursion-de-cola\/\" aria-label=\"Leer m\u00e1s sobre Recursi\u00f3n de cola\">Leer m\u00e1s<\/a><\/p>\n","protected":false},"author":1175,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[27],"tags":[],"class_list":["post-2776","post","type-post","status-publish","format-standard","hentry","category-desarrollo-de-software"],"_links":{"self":[{"href":"https:\/\/techlib.net\/techedu\/wp-json\/wp\/v2\/posts\/2776","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/techlib.net\/techedu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/techlib.net\/techedu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/techlib.net\/techedu\/wp-json\/wp\/v2\/users\/1175"}],"replies":[{"embeddable":true,"href":"https:\/\/techlib.net\/techedu\/wp-json\/wp\/v2\/comments?post=2776"}],"version-history":[{"count":0,"href":"https:\/\/techlib.net\/techedu\/wp-json\/wp\/v2\/posts\/2776\/revisions"}],"wp:attachment":[{"href":"https:\/\/techlib.net\/techedu\/wp-json\/wp\/v2\/media?parent=2776"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/techlib.net\/techedu\/wp-json\/wp\/v2\/categories?post=2776"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/techlib.net\/techedu\/wp-json\/wp\/v2\/tags?post=2776"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}