recursividad en c

39
Programación Funciones en C: Recursividad

Upload: cristian-manuel-vallejos-vega

Post on 01-Oct-2015

62 views

Category:

Documents


0 download

DESCRIPTION

Conceptos de funciones y recursividad en C

TRANSCRIPT

  • ProgramacinFunciones en C: Recursividad

  • Funciones en C

    Agrupan un conjunto de instrucciones bajo el mismo nombre para realizar una tareaespecfica.

    Facilitan la resolucin de problemas, dividiendo a ste en pequeos subproblemas.

  • Funciones en C

    Una llamada a una funcin ejecuta el grupo de instrucciones de una funcin Una vez que la funcin ha sido llamada, ejecuta sus instrucciones y luego regresa al

    mismo punto donde fue llamada. Esta ltima accin se conoce como retorno.

  • Declaracin de Funciones

    Al igual que las variables, las funciones deben serdeclaradas antes de usarse.

    La forma de declarar una funcin es:

    Ejemplo:

  • Implementacin de Funciones

    int potencia (int base, int exponente){

    /* Aqu, siempre entre llaves, se escriben todas las instrucciones que debe ejecutar la funcin */

    }

    La primera lnea se escribe igual que en la declaracin, pero sin el punto y

    coma.

  • Retorno en Funciones

    Si la funcin debe retornar un valor, lo har usando la sentencia returndentro del cuerpo de la funcin y en el lugar en que deba retornar.

    La forma de usar esta sentencia es:

    Esto especifica que la funcin debe terminar y devolver el valor de lavariable o expresin indicada.

    Hay funciones que no retornan datos, en este caso puede usarse return,de la siguiente forma:

  • Uso de Funciones

    Para las funciones que retornan un valor, el uso de ellas consiste en cmo seutiliza el valor retornado.

    Se puede dar dos usos a ese valor: Almacenar el valor de retorno en una variable (deber ser del mismo tipo de

    dato de retorno de la funcin) Utilizar el valor de retorno en una expresin.

  • Otro Ejemplo

    void holamundo(){

    printf(HOLA MUNDO);return;

    }

    main(){

    holamundo();}

  • Otro Ejemplo

    #includeint sumar(int numero1, int numero2){

    return numero1+numero2;}

    main(){

    int suma = sumar(5, 3);printf(La suma es %d, suma);

    }

  • Otro Ejemplo

    #include

    main(){

    int suma = sumar(5, 3);printf(La suma es %d, suma);

    }

    int sumar(int numero1, int numero2){

    return numero1+numero2;}

  • Otro Ejemplo

    #includeint sumar(int numero1, int numero2);main(){

    int suma = sumar(5, 3);printf(La suma es %d, suma);

    }

    int sumar(int numero1, int numero2){

    return numero1+numero2;}

  • Otro Ejemplo

    #includeint sumar(int numero1, int numero2){

    return numero1+numero2;}

    main(){

    int a=5, b=3;int suma = sumar(a, b);printf(La suma es %d, suma);

    }

  • Paso de Parmetros

    Las funciones pueden, o no, recibir datos. Existen dos formas de enviar los datos hacia una funcin:

    Por Valor Por Referencia

  • Paso de Parmetros Por Valor

    El paso por valor enva unacopia de los parmetros a lafuncin, por lo tanto loscambios que se hagan en ellano son tomados en cuentadentro de la funcin main().

  • Paso de Parmetros Por Valor

    Ejemplo:

    #includevoid sumar_valor(int numero);

    main(){

    int numero = 9;sumar_valor(numero);printf(%d, numero);

    }

    void sumar_valor(int numero){

    numero++;printf(%d, numero);return;

    }

  • Paso de Parmetros Por Valor

    Ejemplo:

    #includevoid sumar_valor(int numero);

    main(){

    int numero = 9;sumar_valor(numero);printf(%d, numero);

    }

    void sumar_valor(int numero){

    numero++;printf(%d, numero);return;

    }

    numero = 9

    numero = 10

  • Paso de Parmetros Por Referencia

    Se realiza usando punteros. Seenva la direccin de memoriade la variable, por lo que loscambios que se hagan en lafuncin s afectarn el valor dela variable en el main().

  • Paso de Parmetros Por Referencia

    Ejemplo:

    #includevoid sumar_valor(int *numero);

    main(){

    int numero = 9;sumar_valor(&numero);printf(%d, numero);

    }

    void sumar_valor(int *numero){

    *numero=*numero+1;printf(%d, *numero);return;

    }

  • Paso de Parmetros Por Referencia

    Ejemplo:

    #includevoid sumar_valor(int *numero);

    main(){

    int numero = 9;sumar_valor(&numero);printf(%d, numero);

    }

    void sumar_valor(int *numero){

    *numero=*numero+1;printf(%d, *numero);return;

    }

    numero = 10

    numero = 10

  • Variables Locales y Globales

    Adems de pasar valores a una funcin, tambin se pueden declarar tipos dedatos dentro de las funciones. Estos tipos de datos declarados dentro de unafuncin son slo accesibles dentro de la misma funcin y son conocidos comovariables locales. As, se puede definir los mismos nombres de variables endiferentes funciones, ya no tiene nada que ver una con otra.

  • Ejemplo:

    Variables Locales y Globales

    void funcion1(){

    int dato = 2;printf(%d, dato);return;

    }void funcion2(){

    int dato = 5;printf(%d, dato);return;

    }

    main(){

    funcion1();funcion2();

    }

  • Variables Locales y Globales

    Adems, existen variables que se definen fuera del main() y fuera de cualquierfuncin creada por el programador. Estas variables se conocen como variablesglobales, ya que pueden ser usadas tanto en el main() como en otras funciones.

  • Ejemplo:

    Variables Locales y Globales

    #include

    int x = 20;

    void funcion(){

    printf(%d, x);return;

    }

    main(){

    printf(%d, x);funcion();

    }

  • Llamado entre funciones

    La funcin principal main() no es la nica que puede llamar a otras funciones, dehecho, se pueden crear funciones que llamen a otras funciones.

    Ejemplo:

    void funcion1(){

    int dato = 2;printf(%d, dato);funcion2();return;

    }void funcion2(){

    int dato = 5;printf(%d, dato);return;

    }

    main(){

    funcion1();funcion2();

    }

  • Paso de Arreglos como Parmetro

    Los arreglos son pasados por referencia hacia una funcin. Se hace necesarioentregar tambin el tamao del arreglo.

    Ejemplo:

    int suma_vector(int v[], int n){

    int i, suma=0;for(i=0; i

  • Analizar Ejemplo

    i es variable global

    Funcin que duplica el contenido de un vector

    Funcin que retorna la suma de loselementos de un vector, adems llama adoble

    Funcin principal. Imprime la suma obtenidade la funcin suma_vector y el vectorduplicado.

  • Recursividad

  • Para entender lo que es la recursividad, hay que entender primero lo que es larecursividad

    - Javier Checa

  • Recursividad

    Se dice que una funcin es recursiva cuando se define en funcin de si misma (se llama a s misma).

    No todas la funciones pueden llamarse a si mismas, sino que deben estar diseadas especialmente para que sean recursivas, de otro modo podran conducir a bucles infinitos, o a que el programa termine inadecuadamente.

    Lo anterior hace referencia a la existencia de un caso base que permita dar trmino a la recursividad.

  • Ejemplo

    Se desea calcular el factorial de un nmero. El factorial de un nmero se define de forma recursiva como sigue:

    ! = 1 !, 2

    1, < 2

  • Ejemplo

  • Ejemplo

  • Ejemplo

  • Ejemplo

  • Ejemplo

  • Ejemplo

  • Ejercicios

    Escribir, para cada caso, una funcin recursiva que permita: Sumar los N primeros nmeros enteros positivos. Calcular la potencia (a y b enteros; b positivo). La multiplicacin de dos nmeros enteros positivos.

    Tarea: Sumar los elementos de un vector de tamao n (de tipo entero). Encontrar el elemento mayor dentro de un vector de tamao n (de tipo

    entero). Calcular el valor de la serie de Fibonacci para un nmero n dado (de tipo

    entero). Calcular la potencia (solo considerando b entero).