Per forza di cose (visto che l'array è ordinato in ordine crescente) se l'elemento a sx di quello considerato è maggiore di quello considerato allora tale elemento a sinistra è pure il più grande nell'array e quindi l'elemento considerato è il primo (il più piccolo) ed occupa la posizione di ordine "n° rotazioni". Non te ne fai niente dell'elemento a dx (salvo che l'array non sia ordinato in senso decrescente).codice:public int rot(int first, int last) { int mid = (first + last)/2; if (mid==0 || a[mid-1] > a[mid]) { return mid; } else { if (a[last] < a[mid]) { return rot(mid+1, last); } else { return rot(first, mid-1); } } }