Java - Recursividad

 
Vista:
Imágen de perfil de rocio
Val: 39
Ha disminuido 1 puesto en Java (en relación al último mes)
Gráfica de Java

Recursividad

Publicado por rocio (15 intervenciones) el 25/06/2019 06:30:56
una pregunta
tengo un ejercicio de recursividad que me pide Devolver la cantidad de apariciones de c en s.( c es un char y s un string)

1
2
3
4
5
6
7
static int cantidadApariciones(String s, char c) {
    if(s.length()==0) {  //caso base
        return 0;
    }else {
 
    }
}

como podria hacer para q me cuente los char C que hay en el String s ...?
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 Sebastian
Val: 282
Ha disminuido 1 puesto en Java (en relación al último mes)
Gráfica de Java

Recursividad

Publicado por Sebastian (91 intervenciones) el 25/06/2019 07:01:13
Hola

Seria algo asi.
Tomas el ultimo caracter del string y lo vas evaluando, si es igual al caracter le sumas uno a lo que
retorna el método si no, no, y al método le envias el string sin el último caracter

1
2
3
4
5
6
7
8
9
10
11
12
static int cantidadApariciones(String s, char c) {
    if(s.length()==0) { //caso base
      return 0;
    }else {
      if(s.charAt(s.length()-1)==c){
        return cantidadApariciones(s.substring(0,s.length()-1), c)+1;
      }else{
        return cantidadApariciones(s.substring(0,s.length()-1), c);
      }
 
    }
  }
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de rocio
Val: 39
Ha disminuido 1 puesto en Java (en relación al último mes)
Gráfica de Java

Recursividad

Publicado por rocio (15 intervenciones) el 25/06/2019 07:08:23
gracias...
y si me pide ubicar la posicion i en donde aparece por primera vez ese caracter en la cadena como hago ?
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
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

Recursividad

Publicado por Kabuto (1381 intervenciones) el 25/06/2019 11:32:58
Tendrías que hacerlo en otro método separado.

Algo así:

1
2
3
4
5
6
7
public int primeraCoincidencia(String cadena, char caracter) {
    for (int i = 0; i < cadena.length(); i++) {
        if (cadena.charAt(i) == caracter)
            return i; //A la primera coincidencia, retornamos la posicion y se pone fin al método
    }
    return -1; //Si el bucle ha llegado a su fin, es que no existe ese caracter en la cadena
}
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
Imágen de perfil de Sebastian
Val: 282
Ha disminuido 1 puesto en Java (en relación al último mes)
Gráfica de Java

Recursividad

Publicado por Sebastian (91 intervenciones) el 25/06/2019 12:38:28
Pues seria como kabuto pero ya se pierde la recursividad
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
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

Recursividad

Publicado por Kabuto (1381 intervenciones) el 25/06/2019 14:57:12
Con recursividad se puede hacer pasando el indice que estamos consultando, incrementándolo en cada llamada recursiva.
La busqueda comenzaría a partir del valor del indice que le indiquemos en la primera invocación, así que si queremos que empiece desde el principio de la cadena, habrá que indicarle valor 0.

Aunque obviamente buscando mediante un bucle el código es más simple e implica menos computos a nivel interno.


1
2
3
4
5
6
7
8
9
10
public int primeraCoincidencia(String cadena, char caracter, int indice) {
    if (cadena.charAt(indice) == caracter)
        return indice; //Caracter encontrado
    else { //Comprobamos si aun quedan más caracteres por comprobar en la cadena
        if (cadena.length() - indice == 1) { //Este era el último caracter, ya no quedan más
            return -1;
        else //Aun quedan caracteres, hacemos llamada recursiva incrementando indice
            return primeraCoincidencia(cadena, caracter, ++indice)
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar