Boa Tarde, poderiam me ajudar com essa minha tentativa de recursão? Sou péssima nesse assunto, só sei fazer fatorial usando essa técnica kkk.
É o seguinte, preciso preencher um vetor com números aleatórios. Só que cada número sorteado tem um custo envolvido. Isso significa que, por exemplo, o custo da quantidade de números 1 presentes no meu vetor não pode ultrapassar um determinado orçamento. Eu quero fazer essa avaliação já no momento que eu estou inserindo um número. Meu vetor inicialmente tem zeros, sorteado o primeiro número, eu chamo a função verifica custo, que verifica o custo deste número. Se o custo for maior que o orçamento, então ela deve sortear outro número e verificar o custo novamente. E isso deve ser feito até que o custo não ultrapasse o orçamento. Se não ultrapassar, então ela deve me retornar esse número para que eu o coloque no vetor, e começo em outra posição todo o processo novamente.
//Cria um indivíduo de forma aleatória
public int[] individuo() {
int[] S = new int[this.N];
int r;
for (int i = 0; i < this.N; i++) {
r = random.nextInt(this.P) + 1;//Sorteia um número entre 1 e P, incluindo estes
S[i] = r;//insere esse número no meu vetor
S[i] = verificaCusto(r, S, i);//Chama a função verificaCusto() para validar esse número
}
return S;
}
//verifica se a quantidade desse número presente no vetor não ultrapassa o orçamento
public int verificaCusto(int r, int[] S, int i) {
double c;
c = custo(r, S);
if (c <= this.O) {
return r;
}else{
r = random.nextInt(this.P) + 1;//sorteia outro número, porque o anterior foi reprovado
S[i] = r;//insere no vetor
return verificaCusto(r, S, i);//verifica o custo deste novo número.
}
}
O erro é de estouro de pilha, acredito eu.
Exception in thread “main” java.lang.StackOverflowError