Exercicio de Fibonacci usando recursividade e arrays - Codigo apresenta erro -

6 respostas
JoiceFogaca

Boa noite,

Poderiam me ajudar, sou iniciante em programação, estou tentando fazer um exercício da apostila da Caelum, realizar o fibonacci usando recursividade e vetores mais está dando erro na hora de Compilar.

Talvez eu não tenha entendido direito array em java.

Eu não consegui identificar o erro, se alguém puder me ajudar.

public class FibonacciVetor {

   
   int i;
   int [] vetor;
    
   
    int fibo(int j)
    {
    if(i==j)
    {return vetor [i]; }
    if(i>=2)
    {vetor [i+1] = vetor [i-1]+vetor [i-2];
    i++;
    fibo(j);
    }
    vetor[i]=i;
    i++;
    fibo(j);
    return 0;
    }
    
    
}

O main

public class Teste {
    public static void main(String [] args)
    {
        
   FibonacciVetor f = new FibonacciVetor();
   f.i=0;
   f.vetor = new int [10];
   System.out.println(f.fibo(6));
    
    
    
    
    
    }
}

O erro que o NETBEANS me retorna e esse:

run:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
	at fibonaccivetor.FibonacciVetor.fibo(FibonacciVetor.java:26)
	at fibonaccivetor.FibonacciVetor.fibo(FibonacciVetor.java:28)
	at fibonaccivetor.FibonacciVetor.fibo(FibonacciVetor.java:28)
	at fibonaccivetor.FibonacciVetor.fibo(FibonacciVetor.java:32)
	at fibonaccivetor.FibonacciVetor.fibo(FibonacciVetor.java:28)
	at fibonaccivetor.FibonacciVetor.fibo(FibonacciVetor.java:28)
	at fibonaccivetor.FibonacciVetor.fibo(FibonacciVetor.java:28)
	at fibonaccivetor.FibonacciVetor.fibo(FibonacciVetor.java:32)
	at fibonaccivetor.FibonacciVetor.fibo(FibonacciVetor.java:32)
	at fibonaccivetor.Teste.main(Teste.java:18)
Java Result: 1
CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)

Brigadinha pela atenção :wink:

6 Respostas

G

Ola seu segundo if esta sem retorno por isso que esta estourando array

[color=red]java.lang.ArrayIndexOutOfBoundsException:[/color]

mas parece que sua seguencia de Fibonacci esta errada da uma olhada no seu código

G

Ola seu segundo if esta sem retorno por isso que esta estourando array

[color=red]java.lang.ArrayIndexOutOfBoundsException:[/color]

mas parece que sua seguencia de Fibonacci esta errada da uma olhada no seu código

novato25

Tente isso:

public class FibonacciVetor {

	int i;  
	int [] vetor;

	int fibo(int j)  { 
		if(i==j)  {
			return vetor [i-1]; 
		}  
		if(i>=2)  {
			vetor [i] = vetor [i-1]+vetor [i-2];  
			i++;  
			return fibo(j);  
		} else { 
			vetor[i]=1;
			i++;  
			return fibo(j);
		}
	}  

}
JoiceFogaca

Oi,

Brigado por responder ^^;

Fiz o que você falou mas ainda continuo com erro.

então coloquei um return, no segundo if, igual ao ultimo return se tudo der certo nunca vai cair lá pra retornar 0.

O ultimo return eu tbm so tinha colocado por que o NETBEANS tava acusando erro.

Realmente tem erro de logica no fibonacci, ainda vô da uma revisada dps no codigo.

Mas enquanto isso se puder me ajudar com esse erro . Please.

public class FibonacciVetor {

    /**
     * @param args the command line arguments
     */
   int i;
   int [] vetor;
    
   
    int fibo(int j)
    {
    if(i==j)
    {return vetor [i]; }
    if(i>=2)
    {vetor [i+1] = vetor [i-1]+vetor [i-2];
    i++;
    fibo(j);
    return 0;
    }
    vetor[i]=i;
    i++;
    fibo(j);
    return 0;
    }
    
    
}

Erro NETBEANS

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6 at fibonaccivetor.FibonacciVetor.fibo(FibonacciVetor.java:26) at fibonaccivetor.FibonacciVetor.fibo(FibonacciVetor.java:28) at fibonaccivetor.FibonacciVetor.fibo(FibonacciVetor.java:28) at fibonaccivetor.FibonacciVetor.fibo(FibonacciVetor.java:28) at fibonaccivetor.FibonacciVetor.fibo(FibonacciVetor.java:33) at fibonaccivetor.FibonacciVetor.fibo(FibonacciVetor.java:33) at fibonaccivetor.Teste.main(Teste.java:18) Java Result: 1

JoiceFogaca

Olá Amigo Novato25!

Funcionou ! :smiley:

Mas o que estava fazendo de errado que o NETBEANS acusava erro? E aqueles “return 0”?

Pode me explicar melhor ? Pra não cometer o mesmo erro?

Brigadinha

novato25

Bom, como disse o amigo Grohl, estava dando estouro de array (java.lang.ArrayIndexOutOfBoundsException). Você declarou um array com tamanho 10 e estava tentando inserir mais de 10 elementos. Por que? seu código estava dando loop infinito. Tudo por causa da linha 19. O método fibo(j) sempre vai ser chamado e nunca vai chegar na linha 20, no return 0. Assim, ao tentar colocar o 11º elemento no vetor é lançada esta exceção (java.lang.ArrayIndexOutOfBoundsException) indicando que houve estouro de array.

Seu Código:

public class FibonacciVetor {  
  
     
   int i;  
   int [] vetor;  
      
     
    int fibo(int j)  
    {  
    if(i==j)  
    {return vetor [i]; }  
    if(i>=2)  
    {vetor [i+1] = vetor [i-1]+vetor [i-2];  
    i++;  
    fibo(j);  
    }  
    vetor[i]=i;  
    i++;  
    fibo(j);  
    return 0;  
    }  
      
      
}
Criado 26 de dezembro de 2012
Ultima resposta 27 de dez. de 2012
Respostas 6
Participantes 3