universidad tecnológica de la mixteca ejercicios unidad iii

Anuncio
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
Descargar