funciones recursividad n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Funciones. Recursividad PowerPoint Presentation
Download Presentation
Funciones. Recursividad

Loading in 2 Seconds...

play fullscreen
1 / 29

Funciones. Recursividad - PowerPoint PPT Presentation


  • 161 Views
  • Uploaded on

Funciones. Recursividad. Ejemplo 1: La función factorial, n! (para enteros no negativos) Ejemplo 2 : La definición de números naturales: 1) 1 es un número natural 2) Todo sucesor de un número natural es otro número natural. Recursividad:.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Funciones. Recursividad' - ember


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide2
Ejemplo 1: La función factorial, n! (para enteros no negativos)

Ejemplo 2: La definición de números naturales: 1) 1 es un número natural2) Todo sucesor de un número natural es otro número natural

recursividad
Recursividad:

Se dice que un objeto o proceso es recursivo, si en parte está formado por sí mismo o se define en función de si mismo

Ejemplo 3: Un descendiente del Sr. Perez. Es ó un hijo del Sr. Perez (1)

ó un hijo de un descendiente del Sr. Perez (2)

slide5
Ejemplo 4: Potencia entera N (N>=0) de un número real X no nulo

Ejemplo 5: El producto de dos números enteros positivos A y B

slide6
Varios subproblemas que se han pensado anteriormente como iterativos se pueden analizar desde el punto de vista de la recursividad.-
  • A continuación nos limitaremos a tratar la recursión como herramienta de programación

Un subprograma que se llama a sí mismo se dice que es recursivo

tipos de recursi n

Tipos de Recursión:

Subprograma P

-------------

-------------

Llamada a P

------------

Recursión Directa

A) Directa: el sub-programa se llama directamente a sí mismo.

La recursión en los subprogramas puede darse de dos maneras diferentes:

slide8
B) Indirecta: el subprograma llama a otro subprograma, y éste a su vez llama al primero. También se da el caso de recursión indirecta cuando un subprograma llama a otro y éste a un tercero que a su vez llama al primer subprograma

Subprograma P Subprograma Q

----------------- --------------------

----------------- Llamada a P

Llamada a Q --------------------

-----------------

slide9
Ejemplos de recursividad indirecta:Ejemplo 1: Origen Diccionario de Lengua Española ITER Duplex - SopenaMUCHEDUMBRE: f. MultitudMULTITUD: f. MuchedumbreEjemplo 2:“La vida es una muerte que viene. La muerte es una vida vivida”Jorge Luis Borges
caracter sticas
Características:
  • Una recursión es correcta cuando cumple con las condiciones siguientes:

1) Contiene una condición que evite continuar la recursión cuando se haya alcanzado el estado final

2) Se llega si o si al estado final

3) Cuando se llega al estado final se debe haber completado el cálculo correcto

slide11
La primer característica es sumamente importante, las definiciones recursivas correctas tienen siempre una condición de salida llamada “caso base”, de resolución directa y generalmente muy simple.-Los ejemplos mencionados en recursividad indirecta no presentan la condición de salida. Por lo tanto los podemos tomar también como ejemplos de definiciones recursivas incorrectas.-
slide12
Ejemplo: El algoritmo de Euclides para cálcular el máximo común divisor (MCD) se define de la manera siguiente:M si N = 0 “Caso Base” MCD( M, N ) MCD( N, M % N ) si N>0Presenta la condición de salida cuando N es cero
slide13

A continuación presentamos la definición de la función Factorial que en clases anteriores

hemos resuelto utilizando iteraciones

int iFact ( int iN ){

if ( iN = = 0 )

return 1 ; /* Salida de la definición */

else

return iN * iFact ( iN - 1);

/*Parte recursiva propiamente dicha*/

}

slide14
La definición de funciones recursivas es similar a las funciones que hemos utilizado anteriormente. La única diferencia es que en su definición se utiliza la misma función que todavía no ha terminado de definirse
  • El acceso de la función no presenta diferencias la función recursiva se puede llamar desde cualquier expresión o desde cualquier lugar donde se acepte una instrucción
como funciona internamente la recursi n
Como funciona internamente la recursión:
  • Cuando se ejecuta una función recursiva, salvo cuando se ejecute el “caso base”, la misma se activara nuevamente. Con cada llamada recursiva se crea una copia de todas las variables y constantes que estén vigentes, además se guarda una referencia a la siguiente instrucción a ejecutar. Esto continua así hasta que se ejecute condición de salida

La Recursión ocupa generalmente recursos y tiempo

recursi n o iteraci n
Recursión o iteración:
  • Hemos visto que la función Factorial se la pudo implementar de dos maneras distintas, una utilizando una estructura iterativa y la otra llamandose a si misma. Esto sucede en todas las funciones que resuelven un subproblema ejecutando un mismo conjunto de acciones varias veces.-
slide17
Por ejemplo el polinomio de Mc Laurin de grado n asociado a la función exponencial es el siguiente:

También se lo puede definir de la en forma recursiva como: 1 si n = 0; P(x , n) = P(x, n-1) + xn/n! si n > 0

slide18
Los algoritmos recursivos son particularmente apropiados cuando el problema a resolver (o los datos a tratar) se definen en forma recursiva. Las soluciones recursivas en general son más simples y ofrecen soluciones sencillas a problemas complejos.-Como contrapartida ya mencionamos que en general es mas ineficiente que las soluciones iterativas.-
slide19
Dentro de las soluciones recursivas se encuentra un caso cuya ineficiencia se magnifica es aquel en el cual un subprograma se llama a si mismo dos o más veces.-

Subprograma P------------------ Llamada a P ------------------ Llamada a P ------------------ ------------------

ejemplo busqueda binaria
Ejemplo: Busqueda Binaria

El ejemplo esta destinado a una de las operaciones más importantes en el procesamiento de información: la busqueda. La operación de búsqueda permite recuperar la datos previamente almacenados. El resultado que puede arrojar esta operación es éxito, si se encuentra el elemento buscado, o fracaso, en otra circunstancia

slide21
La búsqueda binaria precedió a las computadoras. En esencia, es el algoritmo que se emplea para buscar una palabra en un diccionario, o un nombre en un directorio.-
  • Análisis:Datos: Vector ordenado por orden creciente Elemento a buscarIncógnita: Si el elemento se encuentra su posición dentro del vector
slide22
El procedimiento de búsqueda consiste en lo siguiente: Se ubica el dato que esta almacenado en el “centro” del vector y se lo compara con el elemento a encontrar, si coinciden la búsqueda concluye con éxito, en caso contrario se vuelve a repetir el proceso pero ahora concentrandonos o en el subvector izquierdo o en el subvector derecho según el elemento sea menor o mayor respectivamente que el dato “central”del vector
slide23
El procedimiento se repite hasta que o se encuentra el elemento o el subvector donde se debe buscar no tenga más elementos. Para poder saber donde continuar buscando nos auxiliaremos con dos variables que llevarán el indice inferior y el indice superior del subvector de busqueda
  • 0 1 2 3 4 5 6 7 8 9 10-5 -2 0 3 8 8 9 12 12 26 31 iX= iVect[k] i k d no i k d siBusqueda binaria de iX = 12
slide24
0 1 2 3 4 5 6 7 8 9 10-5 -2 0 3 8 8 9 12 12 26 31 iX= iVect[k] i k d no i k d no i,k d no idk no d i Oh!Busqueda binaria de iX = 11
slide25
#include <stdio.h>

#include <conio.h>

#include "datos.h"

/*Declaracion de variables*/

int iVect[15] = datos1;

int iX;

int iY;

slide26
int iBin (int iV[15],int iElem, int iIzq, int iDer)

{ int iAux;

if (iIzq <= iDer){

iAux = (iIzq + iDer)/2;

if (iElem == iV[iAux])

return (iAux); /*Elemento Encontrado*/

else

{if (iElem > iV[iAux])

iIzq = iAux + 1;

else

iDer = iAux - 1;

iBin (iV, iElem, iIzq, iDer); } }

else

return (-1); /*Elemento No Encontrado*/ }

slide27
main(){

clrscr();

scanf("%d",&iX);

iY = iBin (iVect , iX , 0 , 14 );

if ( iY >-1 )

printf("Elemento encontrado en la posicion: %d",iY+1);

else

printf("Elemento NO encontrado");

getche( );}

slide28
/* Contenido del Archivo “Datos.h”*/

#define datos1 {-5, -3, 0, 2, 3, 5, 10, 15, 45, 78, 79, 81, 89, 100, 122}

Análisis de la búsqueda binaria:

Para analizar la complejidad de la este método tomaremos los casos más favorables y los menos favorables. El primer caso se da cuando el elemento buscado es el central, en dicho caso se hará una sola comparación; el segundo caso sucede cuando el elemento no se encuentra en el arreglo, en dicho caso se harán aproximadamente log2(n) comparaciones (donde: n es el número de elementos del arreglo)

slide29
Cmín = 1 Cmáx = log2(n)

n Cmín Cmed Cmáx

10 1 2.5 4 100 1 4 7 1000 1 5.5 1010000 1 7.5 14

Bibliografía Recomendada:Como Programar en C/C++ H.M. Deitel / P. J. Deitel Ed. Prentice Hall