Reporte Recursividad
Enviado por PaboruNiFiva • 18 de Octubre de 2021 • Documentos de Investigación • 2.195 Palabras (9 Páginas) • 182 Visitas
[pic 1]
Materia: Estructura de Datos
Trabajo: U2 Recursividad
Docente: López Castellanos Carlos Alberto
Alumno: Martínez Alvarado Pablo
Carrera: Ingeniería en Sistemas Computacionales
Numero de control: 20490716
OBJETIVO:
Escriba un programa en Java que implemente las siguientes conversiones:
- Una función recursiva que permita saber si un número es primo o no (divisible sólo por el mismo y por uno)
- Una función recursiva que imprima los valores de un arreglo
- Una función recursiva que indique cuantos dígitos tiene un número (p.e. 1456 -> 4)
- Una función recursiva que sume cuantos dígitos tiene un número (p.e. 1456 -> 16)
- Una función recursiva que busque el número mayor dentro de un arreglo
- Una función recursiva que convierta un numero decimal a binario (p.e. (154)10 = (10011010)2 )
- Una función recursiva que permita convertir un numero entero expresado en binario a decimal
- Una función recursiva que permita hacer la división por restas sucesivas.
Procedimiento:
Una función recursiva que permita saber si un número es primo o no (divisible sólo por el mismo y por uno):
Primero me enfoque en hacer los métodos en orden, yendo primero por el método para comprobar si un número es primo o no, decidí usar valores booleanos para regresar valores de verdadero o falso indicando el estado del número y saber si es primo o no, primero que nada el cómo mandar a llamar este método también es una parte fundamental de su funcionamiento.
[pic 2]
Ejemplo de cómo mandarlo a llamar:
[pic 3]
En este método mi caso base es el siguiente:
[pic 4]
En este caso base se hará una comprobación rápida para saber si el número ingresado es primo o no, básicamente en el primer if se comprueba si el valor “b” (el cual es nuestro valor a-1) es igual a 1, en dado caso de que así sea nos regresaría un valor true indicándonos de que nuestro valor ingresado es un primo, en caso contrario entraría en nuestro else if y se comprobaría si la división del valor “a” y el valor “b” nos deja un residuo de 0, de ser así nos regresaría un valor false, indicándonos que nuestro valor ingresado no es un numero primo.
Después nuestro caso recursivo seria el siguiente:
[pic 5]
Donde básicamente volvemos a llamar a nuestro método, volviendo a ingresar nuestro valor “a” pero ahora tomamos el valor “b” y le restamos una unidad. Haciendo que vuelvan nuevos valores y nuevamente vuelvan a entrar los valores dentro de nuestras condicionales hasta comprobar si es un número primo o no.
Ejemplo con número 5:
[pic 6]
Ejemplo con número 10:
[pic 7]
Una función recursiva que imprima los valores de un arreglo:
Este método void recibirá 2 valores, los cuales serán el arreglo y un índice.
[pic 8]
Ejemplo de cómo mandar a llamar:
[pic 9]
En este método el caso base es el siguiente:
[pic 10]
Donde básicamente la clase base imprimirá el valor del arreglo cuando el índice sea igual al tamaño del arreglo menos una unidad (esto es más que nada importante con arreglos de 1 valor).
Caso recursivo:
[pic 11]
En la clase recursiva imprimirá el valor el valor del arreglo dependiendo del valor de índice y a este mismo se le sumara una unidad, de este modo si el arreglo es cuenta con 2 valores o más, siempre entrara en nuestra clase recursiva en imprimirá siempre los valores desde la posición 0.
Una función recursiva que indique cuantos dígitos tiene un número (p.e. 1456 -> 4)
En este caso se usó un método int el cual tiene como parámetros 2 valores, el cual uno es de tipo String y el otro tipo int:
[pic 12]
Ejemplo de cómo mandar a llamar (En este caso inicializar una variable int con los valores número y convertirlo después en un String, sin embargo, también se podría dar el valor con una variable String):
[pic 13]
El caso base es el siguiente:
[pic 14]
La clase base lo que hará es que cuando el valor v (el cual inicializamos como 0) tenga el mismo valor que el tamaño del valor String “x” entonces nos regresara el valor de “v”.
Caso recursivo:
[pic 15]
Nuestra clase recursiva básicamente se encargara de que en caso de no cumplirse el caso base, sumara una unidad al valor “v”, significando entonces que “v” tendría una unidad más de valor por lo tanto nuestro valor “x” tiene por lo menos 1 digito, y volviendo a llamar al método nuevamente para comprobar el caso base y si este no vuelve a cumplirse, sumaria otra unidad al valor “v”, significando que nuevamente el valor “x” tendría por lo menos 2 dígitos, y así seria hasta que nuestro valor “v” tenga el mismo valor que el tamaño de nuestro valor “x”
Una función recursiva que sume cuantos dígitos tiene un número (p.e. 1456 -> 16)
En este caso se usó un método int el cual tiene como parámetros 1 valores, el cual es un valor tipo int:
[pic 16]
Ejemplo de cómo mandar a llamar:
[pic 17]
El caso es el siguiente:
[pic 18]
La clase base, lo que hará es que cuando el valor a sea menor o igual a 0 nos regresara el valor de a.
Caso recursivo:
[pic 19]
Nuestro caso recursivo lo primero que hará será conseguir el residuo de la división de nuestro valor “a” entre 10, de este modo conseguiremos el ultimo digito del valor que hayamos introducido y después lo sumaremos con la llamada a nuestro método pero con el valor “a” dividido entre 10, de esta forma eliminamos el ultimo digito de nuestro valor “a”, de este modo con el caso recursivo estaremos sumando los residuos de las divisiones, significando que estamos sumando los últimos dígitos del valor “a” siempre (ejemplo: Si el valor “a” es 123, eso significaría que su residuo al dividir entre 10 es 3, como podemos ver es el último digito de nuestro valor, después al dividir 123 entre 10 nos daría 12, de este modo eliminamos el 3, después volviendo a llamar el método nuevamente 12 y su residuo al dividir entre 10 es 2, y eliminamos el 2 del 12 al dividirlo entre 10, así consecutivamente y sumando los residuos), de esta manera cuando nuestro valor “a” sea menor o igual a 0, nos regresaría la suma de los residuos o la suma de los dígitos del valor “a” de derecha a izquierda.
...