elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Que esta mal en este codigo o que me falta??? JAVA es con recursividad
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Que esta mal en este codigo o que me falta??? JAVA es con recursividad  (Leído 1,857 veces)
FiitcherxX

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Que esta mal en este codigo o que me falta??? JAVA es con recursividad
« en: 15 Septiembre 2018, 01:36 am »

Código
  1.  
  2. public class Primos {
  3.  
  4.    public static int SumaArreglo(int a[]) {
  5.        return SumaArreglo(a, a.length - 1);
  6.    }
  7.  
  8.    public static int SumaArreglo(int a[], int i) {
  9.        if (i == 0)
  10.        {
  11.        return a[0];
  12.        }
  13.         else if (Primo(a[i]) == true) {
  14.            return a[i] + SumaArreglo(a, i - 1);
  15.        } else {
  16.            return SumaArreglo(a, i - 1);
  17.        }
  18.    }
  19.  
  20.    public static boolean Primo(int n, int contador) {
  21.  
  22.        if (contador == 1) {
  23.            return true;
  24.        } else if (n % contador == 0) {
  25.            return false;
  26.        } else {
  27.            return Primo(n, contador - 1);
  28.        }
  29.    }
  30.  
  31.    public static boolean Primo(int n) {
  32.        if (n == 1) {
  33.            return true;
  34.        } else {
  35.            return Primo(n, n / 2);
  36.        }
  37.    }
  38.  
  39.    public static void main(String[] args) {
  40.        int A[] = {10,7,8,23,9,2};
  41.        showMessageDialog(null, SumaArreglo(A));
  42.    }
  43. }
  44.  
  45.  

[MOD] para publicar código se usan las etiquetas GeSHi.


« Última modificación: 17 Septiembre 2018, 03:57 am por simorg » En línea

Mr.Moonlight

Desconectado Desconectado

Mensajes: 26



Ver Perfil WWW
Re: Que esta mal en este codigo o que me falta??? JAVA es con recursividad
« Respuesta #1 en: 17 Septiembre 2018, 00:02 am »

por favor usa las etiquetas código GeSHi para poner fragmentos de código ya que de no ser así el código no es 100% correcto ya que se pueden producir errores como el producido en esta linea de codigo
Código
  1. else if (Primo(a[i]) == true)
  2.  
en la que ha interpretado a[ i ] como si estuvieras utilizando una letra cursiva


« Última modificación: 17 Septiembre 2018, 00:05 am por Mr.Moonlight » En línea

Ayudame en posicionamiento SEO en mi practica de la universidad : https://www.atorrijaoguachisnai.com/
Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.355


Ver Perfil
Re: Que esta mal en este codigo o que me falta??? JAVA es con recursividad
« Respuesta #2 en: 17 Septiembre 2018, 10:54 am »

De entrada te diré que no tienes errores de sintaxis, los errores que tiene son semánticos...

Lo primero es el nombre de la función: SumaArreglo... es falso.
Al final lo que (intenta) suma, son los números primos que contenga el array, luego procede cambiar el nombre de la función a lo que hace realmente, ergo: SumaPrimosDelArreglo

Luego mirando del final hacia arriba (funcion... Primo(int n)), tienes esta línea:
Código
  1. return Primo(n, n / 2); //raízcuadrada, no división entre 2
No. El valor mayor con posibilidades de ser divisor, para un valor dado no es la mitad de ese, sino su raíz cuadrada... por ejemplo; para 100, no es 50 (100/2), si no 10 (sqr(100)).

Es decir, calcula previamente la raíz cuadrada y si el resultado es par, ni siquiera necesitas invocar la sobrecarga, porque el único primo par es el 2. Luego ya es cuando puedes invocar a la sobrecarga de primo, con 'n' y el valor precalculado como máximo divisor posible, y así...  para que revise el resto... de posibles divisores.
...luego modificamos bastante la función...
Código
  1. public static boolean Primo(int n) {
  2.        int v;
  3.  
  4.        if (n == 1) {
  5.            return true;
  6.        } else {
  7.           if ((n & 1) == 0 ){  //  'n' es par ????
  8.               if (n == 2) {      // 'n' es 2 ???
  9.                  return true;
  10.               } else {
  11.                  return false;
  12.               }
  13.            } else {                   // entonces calcular si tiene divisores...
  14.                v = Math.sqrt(n);
  15.                return Primo(n, v);
  16.           }
  17.        }
  18.    }
  19.  

Finalmente en la sobrecarga de SumaArreglo (SumaArreglo(int a[], int i)), también hay otro error... asumes que el índice cero del array es primo... Es fin de la recursión, vale, pero nada se sabe sobre si es primo o no...
Es decir has ido calculando todos los valores del array por encima de ese, y cuando llegas al último (de la recursividad, el primero del array), simplemente devuelves ese valor. .....fíjate que en la lista que le pasas (por ejemplo)... el primeor es 10, luego estarás sumando 10 además del resto de primos.

Ese valor también debe ser probado si es o no primo, luego la línea:
Código
  1. return a[0];
Debe ser cambiada por una ligera modificación del código que tienes debajo:
Código
  1.        if (Primo(a[i]) == true) {
  2.            return a[i] ;  // nota que i vale 0, da igual poner a[0], que a[i]
  3.        } else {
  4.            return 0;

...y listo...

p.d.: Nota que hay más optimizaciones (simples) que pueden hacerse, igual que descubrimo si es par... podemos descubrir si es múltiplo de 3 y/o de 5.... de 5 es fácil pués basta saber si acaba en 5 (si acaba en 0, ya cae en el tratamiento de par)...
Para el caso del 3 hay que sumar sus cifras, si tras sumas todas las cifras de 'n', son múltiplo exacto de 3, entonces 'n' tiene como divisor al 3, luego salvo que n== 3, no es primo...

« Última modificación: 17 Septiembre 2018, 16:59 pm por #!drvy » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
en que falla este codigo java
Java
JulCesa 3 2,858 Último mensaje 20 Noviembre 2011, 05:29 am
por RyogiShiki
diganme como esta este programa lo hice en dev c++ pero creo q m falta algo
Programación C/C++
eduardo17445 6 4,314 Último mensaje 4 Abril 2013, 01:24 am
por eduardo17445
solo quiero que me digan como esta este codigo y si le falta algo
Programación C/C++
eduardo17445 6 2,859 Último mensaje 24 Mayo 2013, 19:52 pm
por CCross
convirtiendo este codigo PHP en codigo Java
Java
alejogzn 5 2,580 Último mensaje 12 Abril 2015, 02:50 am
por DarK_FirefoX
que le hace falta este codigo en python
Scripting
YunTech 6 2,712 Último mensaje 5 Diciembre 2015, 19:24 pm
por YunTech
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines