Java - buenas tardes querida comunidad de programadores les comento mi situación de verdad ocupo ayuda :(

 
Vista:
Imágen de perfil de ELIZABETH

buenas tardes querida comunidad de programadores les comento mi situación de verdad ocupo ayuda :(

Publicado por ELIZABETH (1 intervención) el 10/09/2022 01:39:21
mi profesor de estructura de dato me dejo este programa, pero soy muy tonta ya que no se mucha programación es una materia adicional en mi curso
y solo por esta vez ocupo la ayuda de un buen programador les comento de que trata

en el programa se deben de usar 2 funciones de Recursividad en la que tienes que sumar los números primos que hay en una cifra por ejemplo si ingresas un 10 va a tener que sumar 2+3+4+7=17
el programa no debe de usar siclo di arreglos esa es la única condición se los agradecería mucho
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

buenas tardes querida comunidad de programadores les comento mi situación de verdad ocupo ayuda :(

Publicado por Kabuto (1381 intervenciones) el 10/09/2022 13:35:41
Primero, el enunciado es incorrecto. El numero 4 no es primo y esta suma no da 17
1
ejemplo si ingresas un 10 va a tener que sumar 2+3+4+7=17

La suma correcta de primos contenidos en el 10 sería:
1
2+3+5+7 = 17

Segundo, la recursividad siempre es algo difícil de aplicar, incluso muchos programadores profesionales rara vez la usan.
Así que es normal que te resulte difícil, y eso no significa que seas tonta.

Para resolverlo, se piden dos funciones recursivas.

Una función debería encargarse de comprobar si un número es primo o no. Así que debería ser de tipo boolean (verdadero o falso) .
Necesitará recibir dos argumentos, uno es el valor que queremos comprobar si es primo. El otro, será un divisor que comenzará con valor 2 e irá incrementandose.
En cada llamada recursiva, se comprobará si el valor es divisible por alguno de los divisores que iremos probando. Si resulta ser divisible por alguno (resto igual 0), significa que NO es primo y retornaremos falso.
Si no es divisible, haremos una nueva llamada recursiva incrementando el divisor.
Todo esto finaliza cuando el divisor es mayor que la mitad del valor, ya que llegados a ese punto, tenemos la seguridad total de que no se va a encontrar ningún divisor.

La otra función, se encargará de acumular la suma de primos contenidos en el valor que indique el usuario. Así que será de tipo int(retornará una suma de enteros).
Necesitará recibir dos argumentos, el valor que se está analizando en busca de primos y la suma de primos, que inicialmente comenzará con valor 0.
En cada llamada recursiva, se comprobará si el valor es primo llamando a la primera función que nos dirá verdadero o falso.
Si lo es, acumulamos el valor en la suma y hacemos una nueva llamada recursiva decrementando el valor original para seguir buscando más primos,
Si no lo es, igualmente hacemos la nueva llamada recursiva, pero no alteraremos la suma acumulada, ya que no se ha encontrado un primo en esta ocasión.
Todo esto finaliza cuando el valor original que se va decrementando, alcanzo el valor 1, pues a partir de aquí ya no hay más primos que buscar.


Toda esta explicación, quizás se entienda mejor mirando las instrucciones de este código.
Haz lo posible por comprender estas líneas tanto como puedas. Pregunta lo que necesites.
Un saludo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import java.util.Scanner;
 
public class SumaPrimos {
 
	public static void main(String[] args) {
 
		Scanner teclado = new Scanner(System.in);
 
		System.out.print("Introduce un número: ");
		int numero = teclado.nextInt();
 
		System.out.println("\nLa suma de números primos es: " + sumaRecursiva(numero, 0));
 
		System.out.println("\n\t\tFIN DE PROGRAMA");
		teclado.close();
 
	}
 
	private static int sumaRecursiva(int valor, int suma) {
 
		if (valor == 1) //Si el valor llega a 1
			return suma; //Proceso recursivo ha terminado y retornamos la suma
 
		if (esPrimo(valor, 2)) //Si el valor actual es primo
			suma += valor; //Lo agregamos a la suma
 
		return sumaRecursiva(valor - 1, suma); //Decrementamos el valor y seguimos buscando primos
	}
 
	private static boolean esPrimo(int valor, int divisor) {
 
		if (valor != 2 && valor % 2 == 0) //El valor es par, y NO es un 2
			return false; //Un par no puede ser primo, excepto el número 2
 
		if (valor/2 < divisor) //No vamos a encontrar divisores por encima de la mitad del valor
			return true; //Así que el valor SÍ es primo.
 
		if (valor%divisor == 0) //El valor SÍ es divisible por el divisor actual
			return false; //Por tanto, NO es primo
 
		else //El valor NO es divisible por el divisor actual...
			return esPrimo(valor, divisor+1); //... comprobamos el siguiente posible divisor
	}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar