jueves, 11 de julio de 2013

Problemas sobre recursividad

Conjunto de ejercicios para hacer uso de recursividad
  1. Hacer un módulo que permita, dado un número entero, calcular recursivamente el valor del factorial de dicho número (sin bucles).
  2. Hacer un módulo que permita, dado el número de conejos, calcular recursivamente la cantidad de orejas de dichos conejos (sin bucles ni multiplicación).
  3. Si la serie fibonacci es: 0, 1, 1, 2, 3, 5... Hacer un módulo que permita, dado un entero n, calcular recursivamente el enésimo elemento de la serie fibonacci.
  4. Si los conejos del problema 2 están ordenados en fila y los conejos ubicados en posiciones impares (1, 3, 5...) tienen dos orejas, mientras que los conejos ubicados en posiciones pares (2, 4, 6...) tienen tres orejas (debido a "mejoramiento" genético). Hacer un módulo que permita, dado el número de conejos, calcular recursivamente la cantidad de orejas de dichos conejos (sin bucles ni multiplicación).
  5. Tenemos un triángulo hecho de cubos, la primera fila tiene 1 cubo, la segunda tiene 2 cubos, la tercera tiene 3 cubos. Hacer un módulo que permita, dado el  número de filas, calcular recursivamente la cantidad de cubos que componen el triángulo.
  6. Dado un número no negativo n. Hacer un módulo que permita calcular recursivamente la suma de los dígitos de dicho número n. Consejo, calcular el módulo de n y 10 nos devuelve el primer digito (desde la derecha).
Cualquier duda sobre los problemas, escriba un comentario.
Ahora agregamos algunos problemas extra
  1. Dado un número entero positivo, hacer un módulo que calcule recursivamente la cantidad de veces que aparece el dígito 5 en dicho número.
  2. Dado un número entero positivo, hacer un módulo que calcule recursivamente la cantidad de veces que aparece el dígito 3 en dicho número, haciendo contar doble si dicho dígito aparece consecutivamente, es decir 3933 devolverá 4.
  3. Dados dos números enteros (base y n), hacer un módulo que calcule recursivamente el valor de la base elevada a la potencia n, es decir, si base es 4 y n es 2 debe devolver 16.
  4. Dada una cadena de caracteres, hacer un módulo que calcule recursivamente la cantidad de ocurrencias del caracter ‘x’.
  5. Dada una cadena de caracteres, hacer un módulo que calcule recursivamente la cantidad de ocurrencias de la secuencia de caracteres ‘:)’.
  6. Dada una cadena de caracteres, hacer un módulo que reemplaze recursivamente las ocurrencias del caracter ‘x’ por el caracter ‘y’.
  7. Dada una cadena de caracteres, hacer un módulo que reemplaze recursivamente las ocurrencias de la secuencia de caracteres ‘pi’ por los caracteres ‘3.14’.
  8. Dada una cadena de caracteres, hacer un módulo que elimine recursivamente el caracter x de dicha cadena.
  9. Dado un arreglo de enteros, hacer un módulo que calcule recursivamente si aparece el nro 4 en dicho arreglo, para ello enviaremos un entero n que será usado como posicion inicial de la búsqueda, recuerde que los arreglos son de base 0.
  10. Dado un arreglo de enteros, hacer un módulo recursivo que llene el arreglo recursivamente con múltiplos de 3.
  11. Dado un arreglo de enteros, hacer un módulo que calcule recursivamente la cantidad de veces que aparece el nro 4 en dicho arreglo, para ello enviaremos un entero n que será usado como posicion inicial de la búsqueda, recuerde que los arreglos son de base 0.
  12. Dado un arreglo de enteros, hacer un módulo que calcule recursivamente si el arreglo contiene algún valor seguido del mismo valor multiplicado por tres, es decir, si tenemos el arreglo {3, 5, 15, 6} deverá devolver true, para ello enviaremos un entero n que será usado como posicion inicial de la búsqueda, recuerde que los arreglos son de base 0.
  13. Dada una cadena de caracteres, hacer un módulo que calcule recursivamente una nueva cadena de caracteres en la que los caracteres originales sean separados por ‘|’, es decir, si la cadena original es ‘hola’ el resultado debe ser ‘h|o|l|a’.
  14. Dada una cadena de caracteres, hacer un módulo que calcule recursivamente una nueva cadena de caracteres en la que caracteres adyacentes iguales sean separados por ‘|’, es decir, si la cadena original es ‘perro’ el resultado debe ser ‘per|ro’, si es ‘bbbb’ el resultado será ‘b|b|b|b’.
  15. Dada una cadena de caracteres, hacer un módulo que calcule recursivamente una nueva cadena de caracteres en la que los caracteres ‘a’ aparezcan al final de dicha cadena, es decir, si la cadena original es ‘caravana’ el resultado debe ser ‘crvnaaaa’.
  16. Dada una cadena de caracteres, hacer un módulo que calcule recursivamente la cantidad de veces que la subcadena ‘aa’ aparece en la cadena original sin sobreposición, es decir, si la cadena original es ‘aaxaa’ deverá devolver 2 y si la cadena original es ‘aaa’ deverá devolver 1.
  17. Dada una cadena de caracteres, hacer un módulo que calcule recursivamente una nueva cadena en la que se han reducido los caracteres adyacentes iguales a sólo un caracter, es decir, si la cadena original es ‘ppizzza’ deverá devolver ‘piza’, si la cadena original es ‘perro’ deverá devolver ‘pero’.
  18. Dada una cadena de caracteres en la que sólo aparece un par de parentesis, hacer un módulo que calcule recursivamente una nueva cadena compuesta solo por los elementos entre parentesis (incluidos), es decir, si la cadena original es ‘cabe(haba)aqui’ el resultado será ‘(haba)’.

10 comentarios:

  1. profe en la pregunta 5 como vamos hacer sobre los cubos es decir vamos a dibujar un cubo? o vamos a realizarlo con las filas y columnas es decir llenarlos con 1 y 0 hasta que forme un triangulo

    ResponderEliminar
    Respuestas
    1. En realidad, ya que se trata de un triangulo hecho de cubos, podemos decir que la primera fila esta compuesta de un solo cubo, la segunda de dos, la tercera de tres... y así sucesivamente, por lo que, si le piden la fila 5 el resultado será 5 + 4 + 3 + 2 + 1 = 15. Espero sea suficiente.

      Eliminar
  2. Profe una pregunta, cómo podemos hacer para dividir las cadenas de carácteres en cada una de sus letras?(o en todo caso cómo se podrían hacer los ejercicios de cadenas de carácteres?

    ResponderEliminar
    Respuestas
    1. Buenas noches, tiene en realidad varias opciones, si desea puede trabajar los string por conversión a arreglos de caracteres como se detalla en http://msdn.microsoft.com/en-us/library/system.string.tochararray(v=vs.71).aspx, o hacer uso de la función substring, como se detalla en http://msdn.microsoft.com/en-us/library/system.string.substring(v=vs.71).aspx.
      Si tiene alguna otra idea, compártala como aporte para la solución de los problemas.

      Eliminar
  3. profe no entiendo muy bien la pregunta 9, en si lo q entiendo es q yo voy a ingresar la longitud del arreglo y de ahi sus numeros y si encuentro un 4 en dichos numeros, ¿que hago con ellos? los sumo para indicar la cantidad de 4 que hay en dicho arreglo o muestro cada 4 es decir hay 4 ,3 ,4,5,4 = hay 3 cuatros O 4,3,4,5,4= 4,4,4

    ResponderEliminar
    Respuestas
    1. "hacer un módulo que calcule recursivamente si aparece el nro 4", es decir, deberá devolver verdadero si hay un 4 en el arreglo, en caso contrario devolverá falso, nada mas.

      Eliminar
  4. Profe una pregunta, en la 17, ¿cómo podemos hacer para verificar que no se repitan las letras? o cómo se podria verificar la letra anterior a una letra?

    ResponderEliminar
    Respuestas
    1. en una cadena de caracteres puedes buscar o la letra en posición posterior (posición + 1) o la letra anterior (posición - 1), claro esta, si lo que estas enviando recursivamente no solo es la cadena si no también la posición.

      Eliminar
  5. profe por favor urgente necesito ayuda con la pregunta 18 toda la ayuda posible es bienvenida gracias

    ResponderEliminar
    Respuestas
    1. puede preguntar por los extremos de la cadena (primera y última posición) y devolver la cadena, en caso contrario, analizar la cadena disminuida por la derecha o por la izquierda dependiendo de si encuentra o no los caracteres ( o ) respectivamente, recuerde plantear bien su caso base

      Eliminar