{"id":3071,"date":"2018-03-16T17:16:28","date_gmt":"2018-03-16T22:16:28","guid":{"rendered":"https:\/\/www.manualjava.net\/?p=3071"},"modified":"2018-03-20T23:42:41","modified_gmt":"2018-03-21T04:42:41","slug":"recursividad-infinita","status":"publish","type":"post","link":"https:\/\/www.manualjava.net\/?p=3071","title":{"rendered":"Recursi\u00f3n infinita"},"content":{"rendered":"<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-3076\" src=\"https:\/\/www.manualjava.net\/wp-content\/uploads\/2018\/03\/java53.png\" alt=\"\" width=\"238\" height=\"106\" \/><\/p>\n<p><span style=\"color: #000000;\">La iteraci\u00f3n y la recursi\u00f3n pueden producirse infinitamente. Un bucle infinito ocurre si la prueba o test de continuaci\u00f3n de bucle nunca se vuelve falsa; una recursi\u00f3n infinita ocurre si la etapa de recursi\u00f3n no reduce el problema en cada ocasi\u00f3n, de modo que converja o surge sobre el caso base o condici\u00f3n de salida.\u00a0<\/span><!--more--><\/p>\n<p><span style=\"color: #000000;\">La recursi\u00f3n infinita significa que cada llamada recursiva produce otra llamada recursiva y \u00e9sta, a su vez, otra llamada recursiva, y as\u00ed para siempre. En la pr\u00e1ctica, dicho m\u00e9todo se ejecutar\u00e1 hasta que la computadora agote la memoria disponible y se produzca una terminaci\u00f3n anormal del programa.<\/span><\/p>\n<p><span style=\"color: #000000;\">El flujo de control de un m\u00e9todo recursivo requiere tres condicionales para una terminaci\u00f3n normal:<\/span><\/p>\n<ul>\n<li><span style=\"color: #000000;\">Un test para detener (o continuar) la recursi\u00f3n (condici\u00f3n de salida o caso base).<\/span><\/li>\n<li><span style=\"color: #000000;\">Una llamada recursiva (para continuar la recursi\u00f3n).<\/span><\/li>\n<li><span style=\"color: #000000;\">Un caso final para terminar la recursi\u00f3n.<\/span><\/li>\n<\/ul>\n<h3><strong><span style=\"color: #000000;\">Ejemplo<\/span><\/strong><\/h3>\n<p><span style=\"color: #000000;\">Deducir cual es la condici\u00f3n de salida del m\u00e9todo mcd(), que calcula el mayor denominador com\u00fan de dos n\u00fameros enteros, b1 y b2 (el mcd, m\u00e1ximo com\u00fan divisor; es el entero mayor que divide a ambos n\u00fameros).<\/span><\/p>\n<p><span style=\"color: #000000;\">Supongamos dos n\u00fameros, 6 y 124; el procedimiento cl\u00e1sico para hallar el mcd es la obtenci\u00f3n de divisiones sucesivas entre ambos n\u00fameros (124 entre 6); si el resto no es 0, se divide el n\u00famero menor (6, en el ejemplo) por el resto (4, en el ejemplo), y as\u00ed sucesivamente hasta que el resto sea 0.<\/span><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-3085 alignnone\" src=\"https:\/\/www.manualjava.net\/wp-content\/uploads\/2018\/03\/Ejemplo1.png\" alt=\"\" width=\"100\" height=\"123\" \/><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-3086\" src=\"https:\/\/www.manualjava.net\/wp-content\/uploads\/2018\/03\/Ejemplo2.png\" alt=\"\" width=\"92\" height=\"117\" \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0<img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-3087\" src=\"https:\/\/www.manualjava.net\/wp-content\/uploads\/2018\/03\/Ejemplo3.png\" alt=\"\" width=\"134\" height=\"109\" \/><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #000000;\">En el caso de 124 y 6, donde el mcd es 2, la condici\u00f3n de salida es que el resto sea cero. El algoritmo del mcd entre dos n\u00fameros m y n es:<\/span><\/p>\n<ul>\n<li><span style=\"color: #000000;\">mcd(m,n)\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0es n si n&lt;= m y n divide a m<\/span><\/li>\n<li><span style=\"color: #000000;\">mcd(m,n)\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0es mcd(n,m) si m&lt;n<\/span><\/li>\n<li><span style=\"color: #000000;\">mcd(m,n)\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0es mcd(n, resto de m divido por n) en caso contrario.<\/span><\/li>\n<\/ul>\n<p><span style=\"color: #000000;\">El m\u00e9todo recursivo:<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0public static int mcd(int m, int n){<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0if(n&lt;=m &amp;&amp; m%n==0)<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return n;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0else if(m&lt;n)<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return mcd(n,m);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0else<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return mcd(n,m%n);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0}<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>La iteraci\u00f3n y la recursi\u00f3n pueden producirse infinitamente. Un bucle infinito ocurre si la prueba o test de continuaci\u00f3n de bucle nunca se vuelve falsa; una recursi\u00f3n infinita ocurre si la etapa de recursi\u00f3n no reduce el problema en cada ocasi\u00f3n, de modo que converja o surge sobre el caso base o condici\u00f3n de salida.\u00a0<\/p><p><a class=\"more-link btn\" href=\"https:\/\/www.manualjava.net\/?p=3071\">Seguir leyendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":3076,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[],"_links":{"self":[{"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/posts\/3071"}],"collection":[{"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3071"}],"version-history":[{"count":17,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/posts\/3071\/revisions"}],"predecessor-version":[{"id":3094,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/posts\/3071\/revisions\/3094"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/media\/3076"}],"wp:attachment":[{"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3071"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3071"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3071"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}