[Java] Dimostrazione per induzione?

raffa071292
Salve ragazzi, sto preparando un esame che dovrò sostenere fra pochi giorni e ho preso in mano le tracce degli appelli precedenti per fare un po' di ripasso e ho notato che in ogni esame vi è un esercizio nel quale ci viene chiesto di dimostrare per induzione quello che fa il codice assegnatoci. Vorrei chiedervi: qual'è la tecnica da utilizzare per svolgere questi esercizi?

/**
* O per induzione, o riscrivendo il predicato
*    a[0]+...+a[i-1] == r
* dimostrare che il seguente metodo restituisce in r la sommatoria
* degli elementi in a.
*/

	public static int somma(int[] a) {
		int r = 0;
		int i = 0;
		while (i < a.length) {
			r = r + a[i];
			i = i + 1;
		}
		return r;
	}


/**
* Sia dato un array a con n > 0 elementi.
* Per induzione, sul valore di n, dimostrare che
*    a[0]+...+a[n-1] == somma(a, n).
*/

	public static int somma(int[] a, int n) {
		if (n > 0)
			return somma(a, n - 1) + a[n - 1];
		else
			return 0;
	}


/**
* O per induzione, o riscrivendo il predicato
*    false||a[0]||...||a[i-1] == r
* dimostrare che il seguente metodo restituisce in r la disgiunzione 
* degli elementi in a. 
*/

	public static boolean disg(boolean[] a) {
		boolean r = false;
		int i = 0;
		while (i < a.length) {
			r = r || a[i];
			i = i + 1;
		}
		return r;
	}

Risposte
raffa071292
Ciao ragazzi, non ho trovato nessuna dispensa o informazione sul web che mi possa aiutare a capire come impostare il principio di induzione sui medoti. Ho provato a ragionarci un attimo e spero che ci sia qualcuno di voi che sappia dirmi se il mio procedimento è corretto. Prendendo il primo esercizio sulla sommatoria ho provato a ragionare in questo modo:

- Passo base (prima iterazione) $r=0$, $i=0$ allora scrivo: $r = 0 + a[0]$
- Ipotizzo che vale per $r = n$ (un certo numero di iterazioni) e scrivo: $r' = r + a$ e $i' = i + 1$
- Verifico per $n+1$ iterazioni e sostituisco scrivendo $r' = r + a[i']$ quindi $r' = r + a + a[i+1]$ quindi è vera per tutti gli $n+1$


/**
* O per induzione, o riscrivendo il predicato
*    a[0]+...+a[i-1] == r
* dimostrare che il seguente metodo restituisce in r la sommatoria
* degli elementi in a.
*/

   public static int somma(int[] a) {
      int r = 0;
      int i = 0;
      while (i < a.length) {
         r = r + a[i];
         i = i + 1;
      }
      return r;
   }

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.