{"id":1565,"date":"2016-02-05T17:37:28","date_gmt":"2016-02-05T16:37:28","guid":{"rendered":"http:\/\/smart--grid.net\/?page_id=1565"},"modified":"2022-12-03T22:58:51","modified_gmt":"2022-12-03T21:58:51","slug":"programmation-recursive","status":"publish","type":"page","link":"https:\/\/complex-systems-ai.com\/es\/algoritmico\/programacion-recursiva\/","title":{"rendered":"Programaci\u00f3n recursiva"},"content":{"rendered":"<div data-elementor-type=\"wp-page\" data-elementor-id=\"1565\" class=\"elementor elementor-1565\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-86fbe35 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"86fbe35\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-246832c\" data-id=\"246832c\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-06ec892 elementor-align-justify elementor-widget elementor-widget-button\" data-id=\"06ec892\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/complex-systems-ai.com\/es\/algoritmico\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Algor\u00edtmico<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-678c955\" data-id=\"678c955\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-1c827b1 elementor-align-justify elementor-widget elementor-widget-button\" data-id=\"1c827b1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/complex-systems-ai.com\/es\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Pagina de inicio<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-2bfa5cd\" data-id=\"2bfa5cd\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-cf2c607 elementor-align-justify elementor-widget elementor-widget-button\" data-id=\"cf2c607\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/fr.wikipedia.org\/wiki\/Algorithme_r%C3%A9cursif\" target=\"_blank\" rel=\"noopener\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Wiki<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-d0e57cc elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"d0e57cc\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-4bf8c4c0\" data-id=\"4bf8c4c0\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d63ed6e elementor-widget elementor-widget-text-editor\" data-id=\"d63ed6e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Contenido<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Tabla de contenido alternativo\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Palanca<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewbox=\"0 0 24 24\" version=\"1.2\" baseprofile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/complex-systems-ai.com\/es\/algoritmico\/programacion-recursiva\/#Programmation-recursive\" >Programaci\u00f3n recursiva<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/complex-systems-ai.com\/es\/algoritmico\/programacion-recursiva\/#Recursivite-simple\" >Recursividad simple<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/complex-systems-ai.com\/es\/algoritmico\/programacion-recursiva\/#Recursivite-multiple\" >Recursividad m\u00faltiple<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/complex-systems-ai.com\/es\/algoritmico\/programacion-recursiva\/#Autres-types\" >Otros tipos<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/complex-systems-ai.com\/es\/algoritmico\/programacion-recursiva\/#Pile-dexecution\" >Pila de ejecuci\u00f3n<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/complex-systems-ai.com\/es\/algoritmico\/programacion-recursiva\/#Recursivite-terminale\" >Recursividad terminal<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"Programmation-recursive\"><\/span>Programaci\u00f3n recursiva<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n<div style=\"padding: 5px; background-color: #d5edff; border: 2px solid #3c95e8; -moz-border-radius: 9px; -khtml-border-radius: 9px; -webkit-border-radius: 9px; border-radius: 9px;\">La programaci\u00f3n recursiva es una t\u00e9cnica de programaci\u00f3n que reemplaza las instrucciones de bucle con llamadas a funciones. Por tanto, el mecanismo consiste, en la gran mayor\u00eda de los casos, en crear una funci\u00f3n que se llama a s\u00ed misma una o m\u00e1s veces seg\u00fan diferentes criterios.<\/div>\n\n<p>La estructura de un <a href=\"https:\/\/complex-systems-ai.com\/es\/algoritmico\/\">algoritmo<\/a> recursivo es:<\/p>\n\n<div style=\"padding: 3px; border: 2px dotted #a5a5a5; background-color: #f6f9fa;\">\n<pre> algo () {condici\u00f3n 1 condici\u00f3n 2 ... condici\u00f3n n}<\/pre>\n<\/div>\n\n<p>Las condiciones son generalmente ifs, incluyen las condiciones de parada (no devuelve la funci\u00f3n) o las condiciones de continuidad (reinicia la funci\u00f3n o devuelve la funci\u00f3n). Las condiciones de continuidad modifican las entradas de la funci\u00f3n reiniciada. Una funci\u00f3n recursiva debe tener al menos una condici\u00f3n de parada.<\/p>\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Recursivite-simple\"><\/span>Recursividad simple<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n<div style=\"padding: 5px; background-color: #ffdcd3; border: 2px solid #ff7964; -moz-border-radius: 9px; -khtml-border-radius: 9px; -webkit-border-radius: 9px; border-radius: 9px;\">Una funci\u00f3n simplemente recursiva se llama a s\u00ed misma como m\u00e1ximo una vez en cada condici\u00f3n.<\/div>\n\n<p>El programa matem\u00e1tico es del siguiente tipo (ejemplo para el c\u00e1lculo de una potencia):<\/p>\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" class=\"alignnone wp-image-1623 size-full\" src=\"https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2016\/02\/puissance.png\" alt=\"programaci\u00f3n recursiva terminal de recursividad poder algor\u00edtmico\" width=\"247\" height=\"71\" title=\"\"><\/figure>\n\n<p>Aqu\u00ed hay un ejemplo simple para calcular el factorial de n:<\/p>\n\n<div style=\"padding: 3px; border: 2px dotted #a5a5a5; background-color: #f6f9fa;\">\n<pre> int fact (n) {if (n == 0) return 1; de lo contrario, devuelve n * hecho (n-1); }<\/pre>\n<\/div>\n\n<p>Aqu\u00ed podemos ver el hecho de que la recursividad se comporta como un bucle.<\/p>\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Recursivite-multiple\"><\/span>Recursividad m\u00faltiple<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n<div style=\"padding: 5px; background-color: #ffdcd3; border: 2px solid #ff7964; -moz-border-radius: 9px; -khtml-border-radius: 9px; -webkit-border-radius: 9px; border-radius: 9px;\">Una funci\u00f3n recursiva m\u00faltiple puede llamarse a s\u00ed misma varias veces en cada condici\u00f3n.<\/div>\n\n<p>El programa matem\u00e1tico es del siguiente tipo (ejemplo para la relaci\u00f3n de Pascal):<\/p>\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" class=\"alignnone wp-image-1628 size-full\" src=\"https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2016\/02\/pascal.png\" alt=\"programaci\u00f3n recursiva recursi\u00f3n terminal algor\u00edtmica pascal recursi\u00f3n m\u00faltiple\" width=\"357\" height=\"83\" title=\"\" srcset=\"https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2016\/02\/pascal.png 357w, https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2016\/02\/pascal-300x70.png 300w\" sizes=\"(max-width: 357px) 100vw, 357px\" \/><\/figure>\n\n<p>Dar\u00e1 por programa:<\/p>\n\n<div style=\"padding: 3px; border: 2px dotted #a5a5a5; background-color: #f6f9fa;\">\n<pre> int pascal (n, p) {if (p == 0 || p == n) return 1; de lo contrario, devuelve pascal (p, n-1) + pascal (p-1, n-1); }<\/pre>\n<\/div>\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Autres-types\"><\/span>Otros tipos<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n<div style=\"padding: 5px; background-color: #d5edff; border: 2px solid #3c95e8; -moz-border-radius: 9px; -khtml-border-radius: 9px; -webkit-border-radius: 9px; border-radius: 9px;\">\n<p>Dos algoritmos son recursivos &quot;mutuamente&quot; si uno llama al otro y viceversa.<\/p>\n<p style=\"text-align: justify;\">Un algoritmo contiene una recursividad &quot;anidada&quot; si un par\u00e1metro de la recursividad es una llamada a s\u00ed mismo.<\/p>\n<\/div>\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Pile-dexecution\"><\/span>Pila de ejecuci\u00f3n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n<p>La pila de ejecuci\u00f3n del programa actual es una ubicaci\u00f3n de memoria destinada a memorizar los par\u00e1metros, las variables locales as\u00ed como las direcciones de retorno de las funciones que se est\u00e1n ejecutando.<\/p>\n\n<p>Esta pila funciona seg\u00fan el principio LIFO (\u00faltimo en entrar, primero en salir) y tiene un tama\u00f1o fijo. Aqu\u00ed est\u00e1 la pila para el factorial simple, tan pronto como el programa lee un m\u00e9todo, lo ejecuta, manteniendo el resto de la informaci\u00f3n en la pila, y agrega los nuevos resultados a la parte superior de la pila. Dado que es LIFO, esta \u00faltima informaci\u00f3n se leer\u00e1 primero, por lo que da la impresi\u00f3n de una pir\u00e1mide de ejecuci\u00f3n:<\/p>\n\n<div style=\"padding: 3px; border: 2px dotted #a5a5a5; background-color: #f6f9fa;\">\n<pre>Llamada a un hecho (3) 3 * hecho (2) Llamado a un hecho (2) 2 * hecho (1) Llamado a un hecho (1) 1 * hecho (0) Llamado a un hecho (0) Devuelve el valor 1 Devuelve 1 * 1 Devuelve 2 * 1 Devuelve 3 * 2 Devuelve 6<\/pre>\n<\/div>\n\n<p>La pila de ejecuci\u00f3n de la secuencia de Fibonacci sigue el mismo principio:<\/p>\n\n<div style=\"padding: 3px; border: 2px dotted #a5a5a5; background-color: #f6f9fa;\">\n<pre>int fibo (n) {return (n &lt;2)? 1: fibo (n-1) + fibo (n-2); }<\/pre>\n<\/div>\n<hr class=\"wp-block-separator\" \/>\n<div style=\"padding: 3px; border: 2px dotted #a5a5a5; background-color: #f6f9fa;\">\n<pre>Fibo (3) Fibo (2) + esperar Llamar a Fibo (2) Fibo (1) + esperar Llamar a Fibo (1) Retorna 1 1 + Fibo (0) Llamar a Fibo (0) Retorna 1 Retorna 1 + 1 2+ Fibonacci (1) Llamada a Fibonacci (1) Devuelve 1 Devuelve 2 + 1 Devuelve 3<\/pre>\n<\/div>\n\n<p>Vemos claramente aqu\u00ed un efecto de monta\u00f1a rusa debido a la aparici\u00f3n sucesiva de la funci\u00f3n a la izquierda tan pronto como se encuentra. Es m\u00e1s f\u00e1cil representar la pila de una funci\u00f3n recursiva m\u00faltiple mediante una <a href=\"https:\/\/complex-systems-ai.com\/es\/teoria-de-grafos\/recorrido-de-grafos\/\">viaje en profundidad<\/a> (vamos m\u00e1s lejos en los sucesores) de su \u00e1rbol de llamadas recursivo:<\/p>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img fetchpriority=\"high\" decoding=\"async\" class=\"alignnone wp-image-1666 size-full\" src=\"https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2016\/02\/fibo.png\" alt=\"programaci\u00f3n recursiva recursividad algor\u00edtmica recursividad terminal recursividad m\u00faltiple \u00e1rbol de llamadas de Fibonacci\" width=\"421\" height=\"339\" title=\"\" srcset=\"https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2016\/02\/fibo.png 421w, https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2016\/02\/fibo-300x242.png 300w\" sizes=\"(max-width: 421px) 100vw, 421px\" \/><\/figure>\n<\/div>\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Recursivite-terminale\"><\/span>Recursividad terminal<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n<div style=\"padding: 5px; background-color: #d5edff; border: 2px solid #3c95e8; -moz-border-radius: 9px; -khtml-border-radius: 9px; -webkit-border-radius: 9px; border-radius: 9px;\">Decimos que una funci\u00f3n es recursiva terminal si el resultado de esta llamada es el resultado de la funci\u00f3n.<\/div>\n\n<p>Por lo tanto, la pila no tiene nada en la memoria durante la recursividad. Esto significa que el valor devuelto es directamente el valor obtenido sin que exista ninguna operaci\u00f3n adicional. Tomemos el ejemplo del factorial de forma recursiva terminal:<\/p>\n\n<div style=\"padding: 3px; border: 2px dotted #a5a5a5; background-color: #f6f9fa;\">\n<pre> int fact (n, a) {if (n == 0) return a; de lo contrario, devuelve hecho (n-1, n * a); } \/\/ ten cuidado, el valor de a al principio es muy importante<\/pre>\n<\/div>\n\n<p>Esto es exactamente lo mismo que escribir el siguiente ciclo:<\/p>\n\n<div style=\"padding: 3px; border: 2px dotted #a5a5a5; background-color: #f6f9fa;\">\n<pre> mientras que (n! = 0 {n * = a; n--;}<\/pre>\n<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>P\u00e1gina de inicio de Algorithms Wiki Programaci\u00f3n recursiva La programaci\u00f3n recursiva es una t\u00e9cnica de programaci\u00f3n que reemplaza las declaraciones de bucle con llamadas a funciones. Los \u2026 <\/p>","protected":false},"author":1,"featured_media":0,"parent":1062,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1565","page","type-page","status-publish","hentry"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/complex-systems-ai.com\/es\/wp-json\/wp\/v2\/pages\/1565","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/complex-systems-ai.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/complex-systems-ai.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/complex-systems-ai.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/complex-systems-ai.com\/es\/wp-json\/wp\/v2\/comments?post=1565"}],"version-history":[{"count":4,"href":"https:\/\/complex-systems-ai.com\/es\/wp-json\/wp\/v2\/pages\/1565\/revisions"}],"predecessor-version":[{"id":17939,"href":"https:\/\/complex-systems-ai.com\/es\/wp-json\/wp\/v2\/pages\/1565\/revisions\/17939"}],"up":[{"embeddable":true,"href":"https:\/\/complex-systems-ai.com\/es\/wp-json\/wp\/v2\/pages\/1062"}],"wp:attachment":[{"href":"https:\/\/complex-systems-ai.com\/es\/wp-json\/wp\/v2\/media?parent=1565"}],"curies":[{"name":"gracias","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}