Warning: The magic method Slickr_Flickr_Plugin::__wakeup() must have public visibility in /home/kenbauer/public_kenscourses/tc101winter2015/wp-content/plugins/slickr-flickr/classes/class-plugin.php on line 152

Warning: Cannot modify header information - headers already sent by (output started at /home/kenbauer/public_kenscourses/tc101winter2015/wp-content/plugins/slickr-flickr/classes/class-plugin.php:152) in /home/kenbauer/public_kenscourses/tc101winter2015/wp-includes/rest-api/class-wp-rest-server.php on line 1831

Warning: Cannot modify header information - headers already sent by (output started at /home/kenbauer/public_kenscourses/tc101winter2015/wp-content/plugins/slickr-flickr/classes/class-plugin.php:152) in /home/kenbauer/public_kenscourses/tc101winter2015/wp-includes/rest-api/class-wp-rest-server.php on line 1831

Warning: Cannot modify header information - headers already sent by (output started at /home/kenbauer/public_kenscourses/tc101winter2015/wp-content/plugins/slickr-flickr/classes/class-plugin.php:152) in /home/kenbauer/public_kenscourses/tc101winter2015/wp-includes/rest-api/class-wp-rest-server.php on line 1831

Warning: Cannot modify header information - headers already sent by (output started at /home/kenbauer/public_kenscourses/tc101winter2015/wp-content/plugins/slickr-flickr/classes/class-plugin.php:152) in /home/kenbauer/public_kenscourses/tc101winter2015/wp-includes/rest-api/class-wp-rest-server.php on line 1831

Warning: Cannot modify header information - headers already sent by (output started at /home/kenbauer/public_kenscourses/tc101winter2015/wp-content/plugins/slickr-flickr/classes/class-plugin.php:152) in /home/kenbauer/public_kenscourses/tc101winter2015/wp-includes/rest-api/class-wp-rest-server.php on line 1831

Warning: Cannot modify header information - headers already sent by (output started at /home/kenbauer/public_kenscourses/tc101winter2015/wp-content/plugins/slickr-flickr/classes/class-plugin.php:152) in /home/kenbauer/public_kenscourses/tc101winter2015/wp-includes/rest-api/class-wp-rest-server.php on line 1831

Warning: Cannot modify header information - headers already sent by (output started at /home/kenbauer/public_kenscourses/tc101winter2015/wp-content/plugins/slickr-flickr/classes/class-plugin.php:152) in /home/kenbauer/public_kenscourses/tc101winter2015/wp-includes/rest-api/class-wp-rest-server.php on line 1831

Warning: Cannot modify header information - headers already sent by (output started at /home/kenbauer/public_kenscourses/tc101winter2015/wp-content/plugins/slickr-flickr/classes/class-plugin.php:152) in /home/kenbauer/public_kenscourses/tc101winter2015/wp-includes/rest-api/class-wp-rest-server.php on line 1831
{"id":14152,"date":"2015-05-06T17:59:22","date_gmt":"2015-05-06T22:59:22","guid":{"rendered":"https:\/\/oswaldouliel.withknown.com\/2015\/mastery21---use-of-recursion-for-repetitive-algorithms"},"modified":"2015-05-06T17:59:22","modified_gmt":"2015-05-06T22:59:22","slug":"mastery21-use-of-recursion-for-repetitive-algorithms-4","status":"publish","type":"post","link":"https:\/\/kenscourses.com\/tc101winter2015\/2015\/mastery21-use-of-recursion-for-repetitive-algorithms-4\/","title":{"rendered":"#Mastery21 – Use of recursion for repetitive algorithms"},"content":{"rendered":"
\n

Recursividad\u00a0<\/h2>\n

Una\u00a0funci\u00f3n es recursiva cuando se define en funci\u00f3n de si misma, pero no todas la funciones pueden llamarse a si mismas. Deben estar dise\u00f1adas especialmente para que sean recursivas, de otro modo podr\u00edan conducir a bucles infinitos, o a que el programa termine inadecuadamente.<\/p>\n

C++ permite la recursividad. Cada vez que se llama a una funci\u00f3n, se crea un juego de variables locales, de este modo, si la funci\u00f3n hace una llamada a si misma, se guardan sus variables y par\u00e1metros, usando la pila, y la nueva instancia de la funci\u00f3n trabajar\u00e1 con su propia copia de las variables locales. Cuando esta segunda instancia de la funci\u00f3n retorna, recupera las variables y los par\u00e1metros de la pila y continua la ejecuci\u00f3n en el punto en que hab\u00eda sido llamada.<\/p>\n

Por ejemplo:<\/p>\n

Prodr\u00edamos crear una funci\u00f3n recursiva para calcular el factorial de un n\u00famero entero.<\/p>\n

El factorial se simboliza como n!, se lee como “n factorial”, y la definici\u00f3n es<\/em>:<\/p>\n

#e3e3e3;”>n! = n * (n-1) * (n-2) * … * 1<\/span><\/p>\n

Para este ejemplo no es posible calcular el factorial de n\u00fameros negativos, no est\u00e1 definido.<\/p>\n

Debemos de tomar en cuenta que el factorial de cero es 1. De modo que una funci\u00f3n bien hecha para c\u00e1lculo de factoriales deber\u00eda incluir un control para esos casos:<\/p>\n

#e3e3e3;\">\/* Funci\u00f3n recursiva para c\u00e1lculo de factoriales *\/\n#aa4400; font-weight: bold;\">int<\/span> factorial(#aa4400; font-weight: bold;\">int<\/span> n) {\n   #aa4400; font-weight: bold;\">if<\/span>(n #aa4400; font-weight: bold;\">return 0;\n   #aa4400; font-weight: bold;\">else<\/span> #aa4400; font-weight: bold;\">if<\/span>(n > 1) #aa4400; font-weight: bold;\">return<\/span> n*factorial(n-1); \/* Recursividad *\/\n   #aa4400; font-weight: bold;\">return<\/span> 1; \/* Condici\u00f3n de terminaci\u00f3n, n == 1 *\/\n}<\/pre>\n

La recursividad consume muchos recursos de memoria y tiempo de ejecuci\u00f3n, y se debe aplicar a funciones que realmente le saquen partido.<\/p>\n

Tambi\u00e9n existen otras formas de implementar algoritmos recursivos, por lo que no es necesario que una funci\u00f3n se invoque a si misma.<\/p>\n

Ejemplo:\u00a0un par de funciones A y B pueden crear un algoritmo recursivo si la funci\u00f3n A invoca a la funci\u00f3n B, y esta a su vez invoca a la funci\u00f3n A.<\/p>\n

Veamos un ejemplo. Partamos de la siguiente serie:<\/p>\n

#e3e3e3;\">1 - 1\/2 + 1\/3 - 1\/4 + 1\/5 - ... - 1\/2*n + 1\/2*n+1 - ...<\/pre>\n

Aqui tenemos otro ejemplo aun mas complejo:<\/p>\n

#include<\/a> <\/iostream><\/em><\/p>\n

using namespace std;<\/em><\/p>\n

double par(int);<\/em><\/p>\n

double impar(int);<\/em><\/p>\n

double suma(int);<\/em><\/p>\n

int main() {<\/em><\/p>\n

\u00a0 \u00a0 cout <\/em><\/p>\n

\u00a0 \u00a0 cout <\/em><\/p>\n

\u00a0 \u00a0 cout <\/em><\/p>\n

\u00a0 \u00a0 cout <\/em><\/p>\n

\u00a0 \u00a0 cout <\/em><\/p>\n

\u00a0 \u00a0 cout <\/em><\/p>\n

\u00a0 \u00a0 return 0;<\/em><\/p>\n

}<\/em><\/p>\n

double suma(int n) {<\/em><\/p>\n

\u00a0 \u00a0 if(n % 2) return impar(n);<\/em><\/p>\n

\u00a0 \u00a0 else return par(n);<\/em><\/p>\n

}<\/em><\/p>\n

double par(int n) {<\/em><\/p>\n

\u00a0 \u00a0 return impar(n-1)-1\/double(n);<\/em><\/p>\n

}<\/em><\/p>\n

double impar(int n) {<\/em><\/p>\n

\u00a0 \u00a0 if(n == 1) return 1;<\/em><\/p>\n

\u00a0 \u00a0 return par(n-1)+1\/double(n);<\/em><\/p>\n

}<\/em><\/p>\n

\u00a0<\/p>\n

Referencias:\u00a0<\/a>http:\/<\/wbr>\/<\/wbr>c.conclase.net\/<\/wbr>curso\/<\/wbr>?cap=024<\/a><\/p>\n

#Mastery<\/a>21 #TC<\/a>1017<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"

\n

Recursividad <\/h2>\n

Una función es recursiva cuando se define en función de si misma, pero no todas la funciones pueden llamarse a si mismas. Deben estar diseñadas especialmente para que sean recursivas, de otro modo podrían conducir a bucles infinitos, o a que el programa termine inadecuadamente.<\/p>\n

C++ permite la recursividad. Cada vez que se llama a una función, se crea un juego de variables locales, de este modo, si la función hace una llamada a si misma, se guardan sus variables y parámetros, usando la pila, y la nueva instancia de la función trabajará con su propia copia de las variables locales. Cuando esta segunda instancia de la función retorna, recupera las variables y los parámetros de la pila y continua la ejecución en el punto en que había sido llamada.<\/p>\n

Por ejemplo:<\/p>\n

Prodríamos crear una función recursiva para calcular el factorial de un número entero.<\/p>\n

El factorial se simboliza como n!, se lee como “n factorial”, y la definición es<\/em>:<\/p>\n

#e3e3e3;”>n! = n * (n-1) * (n-2) * … * 1<\/span><\/p>\n

Para este ejemplo no es posible calcular el factorial de números negativos, no está definido.<\/p>\n

Debemos de tomar en cuenta que el factorial de cero es 1. De modo que una función bien hecha para cálculo de factoriales debería incluir un control para esos casos:<\/p>\n

#e3e3e3;\">\/* Función recursiva para cálculo de factoriales *\/\n#aa4400; font-weight: bold;\">int<\/span> factorial(#aa4400; font-weight: bold;\">int<\/span> n) {\n   #aa4400; font-weight: bold;\">if<\/span>(n #aa4400; font-weight: bold;\">return 0;\n   #aa4400; font-weight: bold;\">else<\/span> #aa4400; font-weight: bold;\">if<\/span>(n > 1) #aa4400; font-weight: bold;\">return<\/span> n*factorial(n-1); \/* Recursividad *\/\n   #aa4400; font-weight: bold;\">return<\/span> 1; \/* Condición de terminación, n == 1 *\/\n}<\/pre>\n

La recursividad consume muchos recursos de memoria y tiempo de ejecución, y se debe aplicar a funciones que realmente le saquen partido.<\/p>\n

También existen otras formas de implementar algoritmos recursivos, por lo que no es necesario que una función se invoque a si misma.<\/p>\n

Ejemplo: un par de funciones A y B pueden crear un algoritmo recursivo si la función A invoca a la función B, y esta a su vez invoca a la función A.<\/p>\n

Veamos un ejemplo. Partamos de la siguiente serie:<\/p>\n

#e3e3e3;\">1 - 1\/2 + 1\/3 - 1\/4 + 1\/5 - ... - 1\/2*n + 1\/2*n+1 - ...<\/pre>\n

Aqui tenemos otro ejemplo aun mas complejo:<\/p>\n

#include<\/a> <\/em><\/p>\n

using namespace std;<\/em><\/p>\n

double par(int);<\/em><\/p>\n

double impar(int);<\/em><\/p>\n

double suma(int);<\/em><\/p>\n

int main() {<\/em><\/p>\n

    cout <\/em><\/p>\n

    cout <\/em><\/p>\n

    cout <\/em><\/p>\n

    cout <\/em><\/p>\n

    cout <\/em><\/p>\n

    cout <\/em><\/p>\n

    return 0;<\/em><\/p>\n

}<\/em><\/p>\n

double suma(int n) {<\/em><\/p>\n

    if(n % 2) return impar(n);<\/em><\/p>\n

    else return par(n);<\/em><\/p>\n

}<\/em><\/p>\n

double par(int n) {<\/em><\/p>\n

    return impar(n-1)-1\/double(n);<\/em><\/p>\n

}<\/em><\/p>\n

double impar(int n) {<\/em><\/p>\n

    if(n == 1) return 1;<\/em><\/p>\n

    return par(n-1)+1\/double(n);<\/em><\/p>\n

}<\/em><\/p>\n

 <\/p>\n

Referencias: <\/a>http:\/\/c.conclase.net\/curso\/?cap=024<\/a><\/p>\n

#Mastery<\/a>21 #TC<\/a>1017<\/p>\n<\/div>\n

Continue reading →<\/span><\/a><\/p>\n","protected":false},"author":101,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,3,26],"tags":[387,546,545,95,335,486,40,287],"_links":{"self":[{"href":"https:\/\/kenscourses.com\/tc101winter2015\/wp-json\/wp\/v2\/posts\/14152"}],"collection":[{"href":"https:\/\/kenscourses.com\/tc101winter2015\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kenscourses.com\/tc101winter2015\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kenscourses.com\/tc101winter2015\/wp-json\/wp\/v2\/users\/101"}],"replies":[{"embeddable":true,"href":"https:\/\/kenscourses.com\/tc101winter2015\/wp-json\/wp\/v2\/comments?post=14152"}],"version-history":[{"count":6,"href":"https:\/\/kenscourses.com\/tc101winter2015\/wp-json\/wp\/v2\/posts\/14152\/revisions"}],"predecessor-version":[{"id":19392,"href":"https:\/\/kenscourses.com\/tc101winter2015\/wp-json\/wp\/v2\/posts\/14152\/revisions\/19392"}],"wp:attachment":[{"href":"https:\/\/kenscourses.com\/tc101winter2015\/wp-json\/wp\/v2\/media?parent=14152"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kenscourses.com\/tc101winter2015\/wp-json\/wp\/v2\/categories?post=14152"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kenscourses.com\/tc101winter2015\/wp-json\/wp\/v2\/tags?post=14152"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}