ITI0011:harjutus 18
Kirjeldus
Rekursiooniga tutvumiseks on soovitatav uurida:
- http://pages.cs.wisc.edu/~vernon/cs367/notes/6.RECURSION.html
- Faktoriaal rekursiooniga https://mitpress.mit.edu/sicp/full-text/sicp/book/chapter-1/figs/fact-shape.gif
- Sama asja visualiseerimine java visualizeriga http://goo.gl/ByLxHY
- Fibonacci N'nda numbri saamise visualiseerimine: http://visualgo.net/recursion.html
- Soovi korral harjutamiseks: http://codingbat.com/java/Recursion-1
EX18 tarvis tuleb realiseerida 2 funktsiooni:
maxAbsoluteValueInArray(int[] array, int arrayLength)
- Näiteks [4,-5,1,-2] tagastab 5. Lahendus peaks kasutama rekursiivset loogikat, st funktsioon peab tagastama isennast.
for
jawhile
tsüklid pole lubatud. - Näpunäiteid:
- Oletame, et rivis on 4 inimest. Igaüks mõtleb ühe arvu, me tahame teada, kes mõtles kõige suurema arvu (ilma sohki tegemata).
- Info edastamiseks sosistatakse üksteisele kõrva.
- Saame kasutada järgnevat loogikat:
- Esimene inimene rivis sosistab teisele, maksimaalne arv on
max(1_inimese_arv, ülejäänud_rivi_max)
- Teine inimene, saab seda loogikat täiendada oma numbriga järgnevalt
max(1_inimese_arv, max(2_inimese_arv,ülejäänud_rivi_max))
- Kolmas inimene omakorda
max(1_inimese_arv,max(2_inimese_arv,max(3_inimese_arv, ülejäänud_rivi_max)))
- Viimane teab, et ta on viimane ja tema ülesandeks on arvutada
max(1_inimese_arv,max(2_inimese_arv,max(3_inimese_arv, 4_inimese_arv)))
- Kui viimane saab arvutatud, siis ta saab sosistada eelviimasele vastuse, eelviimane üle-eelviimasele ja nii alguseni välja.
- Arvudega
- max(4, ülejäänud_rivi_max)
- max(4, max(-5, ülejäänud_rivi_max))
- max(4, max(-5, max(1, ülejäänud_rivi_max)))
- max(4, max(-5, max(1, -2))) = 4
- Absoluutväärtustega toimub analoogliselt.
maxElementInArray(int[] array)
, tagastab massiivi maksimaalse elemendi.
Tehke kindlasti esimesena maxABsoluteValueInArray, selle lahendamiseks mõelge loovalt ja kasutage array enda ruumi ajutiste väärtuste hoidmiseks
Mall
<source lang="java">
/**
* EX 18 Solution. * @author <Your Name> */
public class EX18 {
public static void main(String[] args) { // Test here
System.out.println(maxElementInArray(new int[] {12, 4, 2, 1, 9, 11})); System.out.println(maxAbsoluteValueInArray(new int[] {12, 4, 2, 1, 9, 11, -14}, 7));
}
/**
*
* Returns absolute maximum (Distance from 0) value of an array RECURSIVELY.
* Example
* [4,2,1,-5,-1] => 5
* @param arr
* @param arrLength - array length when initialized
* @throws IllegalArgumentException if arr is null or arrLength is negative
* @return valueOfMaximumAbsoluteElement
*/
public static int maxAbsoluteValueInArray(int[] array, int arrayLength) throws IllegalArgumentException {
// TODO: Implement
return 0;
}
/** * Returns maximum element of an array RECURSIVELY. * Example * [4,2,1-5-1] -> 4 * @param arr * @throws IllegalArgumentException if arr is null * @return valueOfMaximumElement */ public static int maxElementInArray(int[] array) throws IllegalArgumentException { // TODO: Implement return 0; }
}
</source>