Tag Archives: #mastery21

#Mastery21 – Use of recursion for repetitive algorithms

Recursividad 

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.

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.

Por ejemplo:

Prodríamos crear una función recursiva para calcular el factorial de un número entero.

El factorial se simboliza como n!, se lee como “n factorial”, y la definición es:

Para este ejemplo no es posible calcular el factorial de números negativos, no está definido.

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:

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

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

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.

Veamos un ejemplo. Partamos de la siguiente serie:

Aqui tenemos otro ejemplo aun mas complejo:

using namespace std;

double par(int);

double impar(int);

double suma(int);

int main() {

    cout

    cout

    cout

    cout

    cout

    cout

    return 0;

}

double suma(int n) {

    if(n % 2) return impar(n);

    else return par(n);

}

double par(int n) {

    return impar(n-1)-1/double(n);

}

double impar(int n) {

    if(n == 1) return 1;

    return par(n-1)+1/double(n);

}

 

Referencias: http://c.conclase.net/curso/?cap=024

21 1017

MASTERY 21 Use of recursion for repetitive algorithms

USO DE RECURSIÓN PARA ALGORITMOS REPETITIVOS

Ya hemos visto como funcionan los loops. Una cosa interesante de ellos es que pueden utilizarse a sí mismas. Para dejar más claro esto es que son algoritmos repetitivos y su función es definirse y utilizarse a sí misma. En Python se puede hacer esto. Un gran ejemplo de ello es la Factorial de la WSQ09.

MASTERY 21 Use of recursion for repetitive algorithms.
MASTERY 21 Use of recursion for repetitive algorithms.
MASTERY 21 Use of recursion for repetitive algorithms

MASTERY 21 Use of recursion for repetitive algorithms

Vemos que dentro de la función de la Factorial, en la línea 7 se llama sí mismo. Esto sirve para definir “n!” luego de haber puesto las condiciones anteriores. Básicamente, es como un loop. También se llamó esa función dentro de otro loop y el output sería esto:

MASTERY 21 Use of recursion for repetitive algorithms
Otro gran ejemplo sería el de Gran Común Divisor en el WSQ12: 
Fórmula de Éuclides: 
GCD(a, a) = a
GCD(a, b) = gcd(a – b, b) si a > b
GCD(a, b) = gcd(a, b – a) si a < b
MASTERY 21 Use of recursion for repetitive algorithms
Se ve que en la línea 5 y en la línea 8 se llama la función GCD() con diferentes parámetros. Es otro loop y el output sería esto:
MASTERY 21 Use of recursion for repetitive algorithms
No en todos los casos se puede utilizar algoritmos recursivos, todo depende de qué tipo de problema estás enfrentando.

MASTERY 21 Use of recursion for repetitive algorithms

USO DE RECURSIÓN PARA ALGORITMOS REPETITIVOS

Ya hemos visto como funcionan los loops. Una cosa interesante de ellos es que pueden utilizarse a sí mismas. Para dejar más claro esto es que son algoritmos repetitivos y su función es definirse y utilizarse a sí misma. En Python se puede hacer esto. Un gran ejemplo de ello es la Factorial de la WSQ09.

MASTERY 21 Use of recursion for repetitive algorithms.
MASTERY 21 Use of recursion for repetitive algorithms.
MASTERY 21 Use of recursion for repetitive algorithms

MASTERY 21 Use of recursion for repetitive algorithms

Vemos que dentro de la función de la Factorial, en la línea 7 se llama sí mismo. Esto sirve para definir “n!” luego de haber puesto las condiciones anteriores. Básicamente, es como un loop. También se llamó esa función dentro de otro loop y el output sería esto:

MASTERY 21 Use of recursion for repetitive algorithms
Otro gran ejemplo sería el de Gran Común Divisor en el WSQ12: 
Fórmula de Éuclides: 
GCD(a, a) = a
GCD(a, b) = gcd(a – b, b) si a > b
GCD(a, b) = gcd(a, b – a) si a < b
MASTERY 21 Use of recursion for repetitive algorithms
Se ve que en la línea 5 y en la línea 8 se llama la función GCD() con diferentes parámetros. Es otro loop y el output sería esto:
MASTERY 21 Use of recursion for repetitive algorithms
No en todos los casos se puede utilizar algoritmos recursivos, todo depende de qué tipo de problema estás enfrentando.

MASTERY 21 Use of recursion for repetitive algorithms

USO DE RECURSIÓN PARA ALGORITMOS REPETITIVOS

Ya hemos visto como funcionan los loops. Una cosa interesante de ellos es que pueden utilizarse a sí mismas. Para dejar más claro esto es que son algoritmos repetitivos y su función es definirse y utilizarse a sí misma. En Python se puede hacer esto. Un gran ejemplo de ello es la Factorial de la WSQ09.

MASTERY 21 Use of recursion for repetitive algorithms.
MASTERY 21 Use of recursion for repetitive algorithms.
MASTERY 21 Use of recursion for repetitive algorithms

MASTERY 21 Use of recursion for repetitive algorithms

Vemos que dentro de la función de la Factorial, en la línea 7 se llama sí mismo. Esto sirve para definir “n!” luego de haber puesto las condiciones anteriores. Básicamente, es como un loop. También se llamó esa función dentro de otro loop y el output sería esto:

MASTERY 21 Use of recursion for repetitive algorithms
Otro gran ejemplo sería el de Gran Común Divisor en el WSQ12: 
Fórmula de Éuclides: 
GCD(a, a) = a
GCD(a, b) = gcd(a – b, b) si a > b
GCD(a, b) = gcd(a, b – a) si a < b
MASTERY 21 Use of recursion for repetitive algorithms
Se ve que en la línea 5 y en la línea 8 se llama la función GCD() con diferentes parámetros. Es otro loop y el output sería esto:
MASTERY 21 Use of recursion for repetitive algorithms
No en todos los casos se puede utilizar algoritmos recursivos, todo depende de qué tipo de problema estás enfrentando.

Mastery 21

Use of recursion for repetitives algorithms

What is recursion? The simple answer is, it’s when a function calls itself. But how does this happen? Why would this happen, and what are its uses?

When we talk about recursion, we are really talking about creating a loop. Let’s start by looking at a basic loop.

 



For those who don’t yet know, this basic loop displays the sentence, “The number is: ” followed by the value of ‘i’. Like this.


Inside the ‘for loop’ declaration we have the integer variable ‘i’ and have its starting value of 0. So the first time the sentence is displayed it reads, “The number is: 0”. The part of the ‘for loop’ declaration that is ‘i++’ tells the program that each time the loop repeats, the value of ‘i’ should be increased by 1. So, the next time the sentence is displayed it reads, “The number is: 1”.
This cycle will continue to repeat for as long as the value of ‘i’ is less than 10. The last sentence displayed would read, “The number is: 9”. As you can see the basic ‘for loop’ has three parts to its declaration, a starting value, what must remain true in order to continue repeating, and a modifying expression. Everything that is contained within the {braces} is what the program performs. Cout stands for console out, and prints words or characters to the screen.
So what does this have to do with recursion? Remember recursion is a loop. What if I did not want to just print a message to the screen? A loop can be used to perform other tasks as well.

Credit:

http://www.cplusplus.com/articles/D2N36Up4/

1017 21

Mastery 21

Use of recursion for repetitive algorithms


Link To My Youtube Video:

Mastery 21

Use of recursion for repetitive algorithms


Link To My Youtube Video:

Mastery 21

Use of recursion for repetitive algorithms


Link To My Youtube Video:

Mastery 21

Uso de recursion en algoritmos repetitivos

Se dice que una función es recursiva cuando se define en función de si misma.

No todas la funciones pueden llamarse a si mismas, sino que 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.

Tampoco todos los lenguajes de programación permiten usar recursividad.

 

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.

Un ejemplo muy clasico de la recursividad es cuando se quiere crear un programa de gdc (greatest commun divisor), en lo cual se puede llamar a si mismo para volver a hacer el mismo procedimiento una y otra vez hasta que una condición sea rota y pueda salir de la recursividad, así, te puede dar los resultados de manera que corresponda.

21 1017

#mastery21 https://www.youtube.com/watch?v=VPeaIUi1KHM