Erinevus lehekülje "ITI0011:harjutus 18" redaktsioonide vahel

Allikas: Kursused
Mine navigeerimisribale Mine otsikasti
(Uus lehekülg: '== Kirjeldus == Rekursiooniga tutvumiseks on soovitatav uurida: http://pages.cs.wisc.edu/~vernon/cs367/notes/6.RECURSION.html Faktoriaal rekursiooniga <img src="https://mitpres...')
 
 
(ei näidata 2 kasutaja 7 vahepealset redaktsiooni)
3. rida: 3. rida:
 
Rekursiooniga tutvumiseks on soovitatav uurida:
 
Rekursiooniga tutvumiseks on soovitatav uurida:
  
http://pages.cs.wisc.edu/~vernon/cs367/notes/6.RECURSION.html
+
* http://pages.cs.wisc.edu/~vernon/cs367/notes/6.RECURSION.html
Faktoriaal rekursiooniga
+
* Faktoriaal rekursiooniga https://mitpress.mit.edu/sicp/full-text/sicp/book/chapter-1/figs/fact-shape.gif
<img src="https://mitpress.mit.edu/sicp/full-text/sicp/book/chapter-1/figs/fact-shape.gif">
+
* Sama asja visualiseerimine java visualizeriga http://goo.gl/ByLxHY
Sama asja visualiseerimine java visualizeriga http://goo.gl/ByLxHY
+
* Fibonacci N'nda numbri saamise visualiseerimine: http://visualgo.net/recursion.html
Fibonacci N'nda numbri saamise visualiseerimine: http://visualgo.net/recursion.html
+
* Soovi korral harjutamiseks: http://codingbat.com/java/Recursion-1
Soovi korral harjutamiseks:
 
http://codingbat.com/java/Recursion-1
 
  
 
EX18 tarvis tuleb realiseerida 2 funktsiooni:
 
EX18 tarvis tuleb realiseerida 2 funktsiooni:
  
* maxAbsoluteValueInArray(int[], arrLength)
+
* <code>'''maxAbsoluteValueInArray(int[] array, int arrayLength)'''</code>
Näiteks [4,-5,1,-2] tagastab 5. Lahendus peaks kasutama rekursiivset loogikat, st funktsioon peab tagastama isennast. <code>for</code> ja <code>while</code> tsüklid pole lubatud.
+
: Näiteks [4,-5,1,-2] tagastab 5. Lahendus peaks kasutama rekursiivset loogikat, st funktsioon peab tagastama isennast. <code>for</code> ja <code>while</code> tsüklid pole lubatud.
Näpunäiteid:
+
: 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).
+
: 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.
+
: Info edastamiseks sosistatakse üksteisele kõrva.
Saame kasutada järgnevat loogikat:
+
: Saame kasutada järgnevat loogikat:
  
Esimene inimene rivis sosistab teisele, maksimaalne arv on <code>max(1_inimese_arv, ülejäänud_rivi_max)</code>
+
: Esimene inimene rivis sosistab teisele, maksimaalne arv on <code>max(1_inimese_arv, ülejäänud_rivi_max)</code>
Teine inimene, saab seda loogikat täiendada oma numbriga järgnevalt <code>max(1_inimese_arv, max(2_inimese_arv,ülejäänud_rivi_max))</code>
+
: Teine inimene, saab seda loogikat täiendada oma numbriga järgnevalt <code>max(1_inimese_arv, max(2_inimese_arv,ülejäänud_rivi_max))</code>
Kolmas inimene omakorda <code>max(1_inimese_arv,max(2_inimese_arv,max(3_inimse_arv, ülejäänud_rivi_max)))</code>
+
: Kolmas inimene omakorda <code>max(1_inimese_arv,max(2_inimese_arv,max(3_inimese_arv, ülejäänud_rivi_max)))</code>
Viimane teab, et ta on viimane ja tema ülesandeks on arvutada <code>max(1_inimese_arv,max(2_inimese_arv,max(3_inimse_arv, 4_inimes_arv)))</code>
+
: Viimane teab, et ta on viimane ja tema ülesandeks on arvutada <code>max(1_inimese_arv,max(2_inimese_arv,max(3_inimese_arv, 4_inimese_arv)))</code>
  
Kui viimane saab arvutatud, siis ta saab sosistada eelviimasele vastuse, eelviimane üle-eelviimasele ja nii alguseni välja.
+
: Kui viimane saab arvutatud, siis ta saab sosistada eelviimasele vastuse, eelviimane üle-eelviimasele ja nii alguseni välja.
  
Arvudega  
+
: Arvudega  
<pre>
+
:
max(4, ülejäänud_rivi_max)
+
max(4, ülejäänud_rivi_max)
max(4, max(-5, ü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, ülejäänud_rivi_max)))
max(4, max(-5, max(1, -2))) = 4
+
max(4, max(-5, max(1, -2))) = 4
</pre>
 
  
Absoluutväärtustega toimub analoogliselt.
 
  
* maxElementInArray(int[]), tagastab massiivi maksimaalse elemendi.  
+
: Absoluutväärtustega toimub analoogliselt.
 +
 
 +
* <code>'''maxElementInArray(int[] array)'''</code>, tagastab massiivi maksimaalse elemendi.  
  
 
Tehke kindlasti esimesena maxABsoluteValueInArray, selle lahendamiseks mõelge loovalt ja kasutage array enda ruumi ajutiste väärtuste hoidmiseks
 
Tehke kindlasti esimesena maxABsoluteValueInArray, selle lahendamiseks mõelge loovalt ja kasutage array enda ruumi ajutiste väärtuste hoidmiseks
56. rida: 54. rida:
 
// Test here
 
// Test here
 
 
System.out.println(maxElementInArray(new int[] { 12,4,2,1,9,11}));
+
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));
+
System.out.println(maxAbsoluteValueInArray(new int[] {12, 4, 2, 1, 9, 11, -14}, 7));
 
 
 
}
 
}
66. rida: 64. rida:
 
* Returns absolute maximum (Distance from 0) value of an array RECURSIVELY.
 
* Returns absolute maximum (Distance from 0) value of an array RECURSIVELY.
 
* Example
 
* Example
* [4,2,1-5,-1] => 5
+
* [4,2,1,-5,-1] => 5
 
* @param arr
 
* @param arr
 
* @param arrLength - array length when initialized
 
* @param arrLength - array length when initialized
72. rida: 70. rida:
 
* @return valueOfMaximumAbsoluteElement
 
* @return valueOfMaximumAbsoluteElement
 
*/
 
*/
public static int maxAbsoluteValueInArray(int[] arr, int arrLength) throws IllegalArgumentException {
+
public static int maxAbsoluteValueInArray(int[] array, int arrayLength) throws IllegalArgumentException {
 
// TODO: Implement
 
// TODO: Implement
 
return 0;
 
return 0;
85. rida: 83. rida:
 
* @return valueOfMaximumElement
 
* @return valueOfMaximumElement
 
*/
 
*/
public static int maxElementInArray(int[] arr) throws IllegalArgumentException {
+
public static int maxElementInArray(int[] array) throws IllegalArgumentException {
 
// TODO: Implement
 
// TODO: Implement
 
return 0;
 
return 0;

Viimane redaktsioon: 29. aprill 2015, kell 12:20

Kirjeldus

Rekursiooniga tutvumiseks on soovitatav uurida:

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 ja while 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>