Esercizio 1. ============ Scrivere in Java un programma che sfrutti un metodo RICORSIVO per far si' che, dato un numero intero, determini quale e' la cifra piu' grande che esso contiene e la stampi su standard output. Esercizio 2. ============ Scrivere in Java un programma (che sfrutti adeguatamente dei metodi statici) che, letto da input un numero intero, sia N, PRIMA stampi il numero speculato di N (ovvero il numero con le stesse cifre di N, ma in posizioni opposte), e POI ne stampi la scomposizione in base 10 di N (unita', decine, centinaia, etc...). ESEMPIO: se il numero inserito fosse 8723 il programma dovrebbe PRIMA stampare 8723 speculato = 3278 e POI stampare 8723 = 3*10^0 + 2*10^1 + 7*10^2 + 8*10^3 Esercizio 3. ============ Si implementi in Java un metodo "void" RICORSIVO che, ricevuto un array di interi, sia v, ed un intero, sia x, operi come illustrato di seguito. Sostanzialmente, il metodo deve "saltellare", partendo dall'elemento in posizione "x", da un elemento all'altro dell'array, fino a quando non accede ad un elemento uguale a "-1". Ad ogni passo, se si trova nella posizione "k", dovra' saltare nella posizione "v[k]". Prima di ogni salto, deve stampare su standard output il valore contenuto nella posizione corrente. ESEMPIO: ----------------------- valore : | 2 | 4 | 3 | 5 |-1 | 1 | <--- array "v" ----------------------- posizione : 0 1 2 3 4 5 <--- indici nell'array "v" se il metodo fosse invocato con parametri il vettore "v" su illustrato ed il valore intero x=2, il metodo dovrebbe produrre l'output seguente: x=2 -> v[2]=3 x=3 -> v[3]=5 x=5 -> v[5]=1 x=1 -> v[1]=4 x=4 -> v[4]=-1 e poi fermarsi. BONUS: Invece che "void", si progetti il metodo come "int", e gli si faccia restituire il numero di salti effettuati. Nell'esempio su riportato, dovrebbe stampare: "Sono stati visitati 5 elementi, ed effettuati 4 salti." Esercizio 4. ============ Si modifichi la soluzione proposta per l'esercizio 1 tenendo conto delle seguenti considerazioni, INCREMENTALMENTE (quindi si devono realizzare 3 nuove versioni del programma): 1. le procedure di salto terminano non solo se si incontra -1, ma anche se si incontra un numero che non puo' rappresentare un indice nell'array (quindi un numero negativo o superiore a v.length-1) 2. oltre che secondo quanto indicato al punto 1., le procedure di salto terminano anche se il numero di salti supera ((v.length)^2). 3. si noti che, in accordo a quanto descritto, possono esserci casi in cui il metodo non smette mai di "saltare" da un punto all'altro, ripetendo piu' volte salti gia' effettuati: il metodo deve essere in grado di CAPIRE se si trova in una situazione come questa, comunicarlo all'utente e terminare.