//EsRicorsioneArray.java
//Risolvere i seguienti esercizi utilizzando la ricorsione.

public class EsRicorsioneArray {
  
/*
1. Scrivere un metodo statico 

     public static boolean appartiene(int[] a,  int n) 

   che dato un array di interi ed un intero n verifichi se n appare in
   a.
*/
  public static boolean appartiene(int[] a, int n) {
    return appartiene(a,0,n);
  }

  private static boolean appartiene(int[] a, int i, int n) {    
    if (i == a.length) return false;
    else 
      if (a[i]==n) return true;
      else return appartiene(a,i+1,n);
  }



/*
2. Scrivere un metodo statico

     public static int occorrenze(int[] a, int n)  

   che dato un array di interi a ed un intero n restituisca il numero di
   occorrenze di n in a. 
*/
  public static int occorrenze(int[] a, int n) {
    return occorrenze(a,0,n);
  }

  private static int occorrenze(int[] a, int i, int n) {
    if (i == a.length) return 0;
    else 
      if (a[i]==n) return 1 + occorrenze(a,i+1,n);
      else return occorrenze(a,i+1,n);
  }



/*
3. Scrivere un metodo statico 

     public static int[] azzeranegativi(int[] a)

   che data un array di interi a restituisca un nuovo array di interi
   ottenuto da a sostituiendo i numeri negativi con 0.
*/

  public static int[] azzeranegativi(int[] a) {
    int[] res = new int[a.length];
    azzeranegativi(a,0,res);
    return res;
  }
    
  private static void azzeranegativi(int[] a, int i, int[] res)  {   
    if (i == a.length) return;
    else {
      if (a[i] < 0) res[i] = 0;
      else res[i] = a[i];
      azzeranegativi(a,i+1,res);  
    }
  } 



/*
 4. Scrivere un metodo statico 

     public static void reverse(int[] a)
   
   che data un array di interi inverta le posizioni dei suoi elementi.
*/

  public static void reverse(int[] a) {
    reverse(a,0);
  }    

  private static void reverse(int[] a, int i) {
    if (i == a.length/2) return;
    else {

      //scambia a[i] e a[a.length-1-i]
      int temp = a[i];
      a[i] = a[a.length-1-i];
      a[a.length-1-i] = temp;
      
      reverse(a,i+1);  
    }
  }

}
