Estructura de Datos 2012 UNIVERSIDAD TECNOLÓGICA DE LA MIXTECA EJERCICIOS UNIDAD III: FUNCIONES RECURSIVAS I Conceptos relacionados con funciones Completar cada uno de los siguientes incisos* 1 Se le llama función iterativa a la función que: _____________________________________________________________________________________________ 2 Los parámetros o argumentos de usan para: _______________________________________________________ 3 Los parámetros pueden ser de cualquier tipo: ___________________________________________________ e incluso arreglos. 4 Los parámetros usados pueden ser más de uno pero deberán ser tomado en cuenta su: _orden, ________________ y_____________________ para ser invocados. 5 Los parámetros se pasan por: ___________________________ y por ______________________________. 6 Un parámetro por valor es aquel que: ____________________________________________________________________________________________. 7 Mientras que un parámetro por referencia es aquel que: ____________________________________________________________________________________________. 8 Un arreglo cuando se usa como parámetro parámetro__________________________________. siempre se pasa como un tipo de 9 Una función recursiva es aquella que _____________________________________________________________ 10Dos ventajas de usar funciones recursivas contra las iterativas: _____________________________________________________________________________________________ _____________________________________________________________________________________________ 11Dos desventajas de usar funciones recursivas contra las iterativas _____________________________________________________________________________________________ _____________________________________________________________________________________________ *Respuestas en el libro de Deitel&Deitel II Prueba de escritorio con funciones recursivas Realizar la prueba de escritorio para la siguientes funciones recursivas 1 Función de Ackermann En 1928, Wilhelm Ackermann consideró una función doblemente recursiva A(m, n, p) de tres variables: m → n → p en la notación de Conway. Ackermann demostró que se trata de una función recursiva que no es primitiva recursiva**. Mónica E. García García Estructura de Datos 2012 En teoría de la computación, la función de Ackermann es una función recursiva que toma dos números naturales como argumentos y devuelve un único número natural. Como norma general se define: ** Las funciones primitivas recursivas coinciden con los programas for. Código en C Sea m =1 y n = 4; cuál es el resultado? int Ackermann(int m, int n) { if(m==0) return n+1; else if(n==0) return Ackermann(m-1,1); else return Ackermann(m-1,Ackermann(m,n-1)); } 2 Torres de Hanoi Las Torres de Hanói es un rompecabezas o juego matemático inventado en 1883 por el matemático francés Éduard Lucas. El juego, en su forma más tradicional, consiste en tres varillas verticales. En una de las varillas se apila un número indeterminado de discos (elaborados de madera) que determinará la complejidad de la solución, por regla general se consideran ocho discos. Los discos se apilan sobre una varilla en tamaño decreciente. No hay dos discos iguales, y todos ellos están apilados de mayor a menor radio en una de las varillas, quedando las otras dos varillas vacantes. El juego consiste en pasar todos los discos de la varilla ocupada (es decir la que posee la torre) a una de las otras varillas vacantes. Para realizar este objetivo, es necesario seguir tres simples reglas: 1. Sólo se puede mover un disco cada vez. 2. Un disco de mayor tamaño no puede descansar sobre uno más pequeño que él mismo. 3. Sólo puedes desplazar el disco que se encuentre arriba en cada varilla. Código en C Sea x = 4, cuántos movimientos se realizan y cuáles son? void hanoi(int x, char desde,char a,char aux) { if(x==1) printf("Mover del disco %c al %c\n",desde,a); else { hanoi(x-1,desde,aux,a); printf("Mover del disco %c al %c\n",desde,a); hanoi(x-1,aux,a,desde); } } III Ejercicios de programación Escribir una función recursiva para cada uno de los siguientes problemas. 1 Verificar si una cadena es un palíndromo o no, retornado el valor 1 en caso contrario 0. Mónica E. García García Estructura de Datos 2012 2 Verificar si una vocal pertenece a una cadena dada, retornado el valor 1 en caso contrario 0 3 Hacer un programa que reciba una secuencia de números enteros positivos (mediante una variable entera). El programa debe de hallar la suma de los dígitos de cada entero y encontrar cuál es el entero cuya suma de dígitos es mayor. La suma de dígitos debe hacerse con una función. 4 Que se reciba un valor en base 10 y se transforme en una base b, siendo la base b de 8 a 16. 5 Un laberinto se puede emular con una matriz n*n en la que los pasos libres están representados por un carácter (el blanco por ejemplo) y los muros por otro carácter (el * por ejemplo). Escribir un programa en el que se genere aleatoriamente un laberinto, se pida las coordenadas de entrada (la fila será 1), las coordenadas de salida (la fila será n) y encontrar TODAS las rutas que llevan de la entrada a la salida. 6 El sistema monetario consta de monedas de valor p1, p2,p3,…,pn (orden creciente) pesos. Escribir un programa que tenga como entrada el valor de las n monedas en pesos, en orden creciente y una cantidad X pesos de cambio. Calcular: a) El número mínimo de monedas que se necesitan para dar el cambio X. b) Calcular el número de formas diferentes de dar el cambio de X pesos con las pi monedas. Mónica E. García García