Palindromo Recursivo

8 respostas
code
F

Obs:Os unicos metodos da classe String permitidos sao charAt() e length();
Acho q esse código está acessando uma posição que não existe, se alguém poder me ajudar

class TP02Q01Palindromo {
   public static void main(String[]args){
      String a = "ara";
      System.out.println(ehPalindromo(a));
   }
   public static boolean ehPalindromo(String s){
      return ehPalindromo(s, 0, s.length()-1);
   }
   public static boolean ehPalindromo(String s, int i, int f){
      boolean resp;
      if(i < f/2){
         resp = true;
      }   
      if(s.charAt(i) != s.charAt(f)){
         return resp = false;
      }
      else{
         resp = ehPalindromo(s,i+1,f-1);
      }   
      return resp;
   }
}

8 Respostas

L

package br.com.lorran.logica;

class Palim {

public static void main(String[]args){

String a = arara;

System.out.println(ehPalindromo(a));

}

public static boolean ehPalindromo(String s){

return ehPalindromo(s, 0, s.length()-1);

}

public static boolean ehPalindromo(String s, int i, int f){

boolean resp;

if(i < (f/2)){

resp = true;

}
if(s.charAt(i) != s.charAt(f)){
    	 
         return resp = false;
      }else {
    	  if(i>=(s.length()-1)) return true;
    	  resp = ehPalindromo(s,i+1,f-1);

      }
      
      
      return resp;
   }
}
L

Vc complicou bastante, existe maneira muito mais simples de fazer isso com o for.

Mas ta aí, testa pra ver se funciona …

F

com o for eu ja fiz, agora preciso fazer na forma recursiva fraga. Mas vlw pela ajuda vou testar aqui

L

Ah beleza, então ta certo.

F

Se tiver como vc me explicar essa parte do code que vc mudou, ficaria agradecido. Tenho dificuldade em recursividade

L

Só adicionei o if(i>=(s.length()-1)) return true; pra checar se a variável i era igual ou maior que o lenght da string, pois sem isso estava num loop infinito até estourar como estava acontecendo.

Funcionou ?

F

Nos testes q eu fiz funcionou sim, vlw =D

lvbarbosa
public static boolean isPalindromo(String palavra, int i, int j) {
    if (i >= j) {
        return true;
    } else {
        boolean iguais = palavra.charAt(i) == palavra.charAt(j);
        return iguais && (j - i == 1 ? true : isPalindromo(palavra, i + 1, j - 1));
    }
}

Exemplo de uso:

public static void main(String[] args) {
    String palindromo = "radar";
    String naoPalindromo = "nadar";
    System.out.println(palindromo + " eh palindromo? " + isPalindromo(palindromo, 0, palindromo.length() - 1));
    System.out.println(naoPalindromo + " eh palindromo? " + isPalindromo(naoPalindromo, 0, naoPalindromo.length() -1));
}
Criado 12 de fevereiro de 2017
Ultima resposta 12 de fev. de 2017
Respostas 8
Participantes 3