[URGENTE]Metodo Recursivo num array

Boas,precisava de um método recursivo estático (int maiores(int[]v,int val)) que retorna-se o numero de elementos do array v com valor maior que val, o array v está ordenando tanto faz cresente ou descrescente.

Posta o que você jah fez e na onde estah “emperrado” para terminar com o seu exercício.

Algoritmos recursivos pressupõe uma estrutura de dados com elementos que possuem uma relação que mostra a direção da navegação.

Pergunta: Como é a estrutura dados contida por este array :?:

flws

Suponha que você tenha o seguinte array:

{3, 1, 4, 1, 5, 9, 2, 6}

e você queira saber o número de elementos que são maiores que 1. Uma forma de você criar um algoritmo recursivo é notar que recursividade quer dizer pegar um problema e reduzir para problemas menores, até que o problema seja trivial.

Por exemplo, qual é o número de elementos do array

{ 3 }

que são maiores que 1? Basta comparar 3 com 1, e vai descobrir que é um.

Qual é o número de elementos do array

{3, 1}

que são maiores que 4? Ele é o número de elementos do array {3 } que são maiores que 4, e você também tem de comparar com o elemento 1 que completa esse array. Nesse caso, o número ainda é um.

De modo geral, se você tem o array:

{a[0], a[1], a[2], a[3], … a[n-1]}

o número de elementos que são maiores que v é o número de elementos do array {a[0], a[1], a[2], a[3], … a[n-2]} que são maiores que v, mais 1 se a[n-1] for maior que v, e 0 se a[n-1] não for maior que v.

o array está ordenado (cresentemente ou decrescentemente).

emperrado estou mesmo no método todo porque tenho alguma dificuldade na manipulação de arrays.

Um segredo que não contei: normalmente métodos recursivos funcionam melhor com listas que com arrays, já que você deve ter percebido, pela minha descrição, que mostro um array “parcial”. Mas como você não pode usar listas, e como é difícil trabalhar com pedaços de arrays em Java (não existe um método “slice” ou o método “head” ou “tail” como em linguagens como Scala ou Lisp, que usam muita recursividade), então você precisa indicar quantos elementos você quer considerar do array.

Você provavelmente terá de fazer 2 métodos:

a) int maiores(int[]v,int val) - é o que você tem de entregar para seu exercício. Ele deve chamar o seguinte método:

b) int maiores (int[] v, int n, int val)

Esse método “b” é que tem de ser recursivo.

n é a quantidade de dados a considerar dentro do vetor v.

Por exemplo, para eu considerar apenas o pedaço inicial de v que tem 3 posições, você chamaria "maiores (v, 3, val).

mas a resolução tem de ser mesmo só um método,para esse n não basta usar o v.leght?

aquilo mais próximo de uma resolução que eu tenho é isto:

public class Maiores3 {

public static int maiores( int[] v, int val ){
	[b]int res;//[i]int res=0;[/i][/b]
	if(v[v.length]>val)
	res++;
	return res;
}

mas tenho um problema com a iniciaçãodo res, senão inicio com valor nenhum o compilador não deixa, se inicio com zero ele vai a zero sempre que o método repete.

Hum… é que v.length é um valor fixo.

Para uma rotina recursiva, você precisaria ficar investigando em um “sub-array”.

Lembre-se: para resolver problemas recursivos, você precisa dividir o problema em pedaços, até que você tenha um problema que seja trivial de resolver.

public static int maiores( int[]v, int val){
	int aux=val;
	int count=0;
	int indice=v.length;
	if(indice!=0){
		if(aux<v[indice-1]){++count;}
		--indice;
		return maiores(subarray(v),aux);
		
	}
	return 0;
}

public static int[] subarray(int[]v){
	int [] aux=new int[v.length-1];
	System.arraycopy(v,0,aux,0,v.length-1);
	return aux;		
}

penso que o metodo de procura esta certo, so a contagem esta a falhar, preciso de uma maneira de guardar o valor do count…tenho k entregar isto oje…agradecia uma ajudinha