Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Rekurssio | Metodit
Java Laajennettu
course content

Kurssisisältö

Java Laajennettu

Java Laajennettu

1. Syvällinen Java-rakenne
2. Metodit
3. Merkkijonon Jatkotaso
4. Luokat
5. Luokat Jatko

book
Rekurssio

Kuinka helposti rikkoa koodisi?

Miksi tämä voi rikkoa koodin? Koska se voi johtaa äärettömään rekursioon, mikä kuluttaa muistia loputtomasti ja heikentää laitteen suorituskykyä. Miksi sitten tarvitsemme rekursiota ollenkaan? Joissakin tapauksissa rekursio voi olla hyödyllinen, mutta sitä tulee käyttää harkiten. Esimerkiksi rekursio voi korvata while-silmukan. Tarkastellaan esimerkkiä, jossa rekursiota käytetään summan laskemiseen kaikista lukuun asti annetuista luvuista:

Main.java

Main.java

copy
1234567891011121314151617181920
package com.example; public class Main { // main method to run the application public static void main(String[] args) { // do not modify the code below System.out.println(calculateSum(5)); } // method to calculate the sum of numbers from 1 to num using recursion static int calculateSum(int num) { // if num is greater than 0, recursively calculate the sum if (num > 0) { num = num + calculateSum(num - 1); } else { return 0; } return num; } }

Metodi calculateSum() kutsuu itseään pienennetyillä arvoilla. Meillä on myös poistumiskohta tästä rekursiosta, kun muuttuja num on nolla. Tämä metodi laskee kaikkien lukujen summan 1:stä parametriin asti, tässä tapauksessa 5. Tarkastellaan vuokaaviota, joka havainnollistaa, miten rekursio toimii tämän metodin avulla:

Yllä oleva esimerkki havainnollistaa, miten metodi kutsuu itseään pienennetyillä arvoilla, ja kun se saavuttaa nollan, se palaa takaisin ylöspäin laskemalla summia yhteen. Voimme myös havaita, miten if-lohkon runko suoritetaan, jossa lisätään num metodikutsun palauttamaan arvoon pienemmällä arvolla. Väliarvot jokaisen metodikutsun jälkeen on merkitty nuolten viereen.

Voimmeko välttää rekursion käyttöä?

Rekursio voidaan myös korvata tavallisella silmukalla. Tarkastellaan esimerkkiä, jossa ensin käytetään rekursiivista metodia ja sitten for-silmukkaa saman toiminnon suorittamiseen:

Main.java

Main.java

copy
123456789101112131415161718192021222324252627282930313233
package com.example; public class Main { // main method to run the application public static void main(String[] args) { // do not modify the code below int num = 5; // printing the result of the recursive sum calculation System.out.println("Result using recursion: " + calculateSum(num)); int result = 0; // calculating the sum using a for-loop for (int i = 1; i <= num; i++) { result = result + i; } // printing the result of the sum calculation using the for-loop System.out.println("Result using for-loop: " + result); } // method to calculate the sum of numbers from 1 to num using recursion static int calculateSum(int num) { // if num is greater than 0, recursively calculate the sum if (num > 0) { num = num + calculateSum(num - 1); } else { return 0; } return num; } }

Tässä näemme, kuinka korvaamme rekursiivisen metodimme tavallisella for-silmukalla, käyttäen muuttujaa i kasvattamaan result-arvoa jokaisella kierroksella lisäämällä siihen i, kunnes se saavuttaa määritetyn luvun num, joka on metodin parametri.

Yhteenveto

Yhteenvetona voidaan todeta, että rekursiiviset metodit voivat olla hyödyllisiä, mutta myös riskialttiita. Rekursion voi usein korvata silmukoilla, ja vaikka se voi yksinkertaistaa tiettyjä tehtäviä, se voi myös aiheuttaa ongelmia, jos sitä ei käytetä huolellisesti. Jos päätät käyttää rekursiota, toimi varoen, vaikka olisit kokenutkin.

1. Mitä rekursio tarkoittaa Javassa?

2. Kumpi on parempi käyttää, rekursio vai tavallinen silmukka?

question mark

Mitä rekursio tarkoittaa Javassa?

Select the correct answer

question mark

Kumpi on parempi käyttää, rekursio vai tavallinen silmukka?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 7

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

course content

Kurssisisältö

Java Laajennettu

Java Laajennettu

1. Syvällinen Java-rakenne
2. Metodit
3. Merkkijonon Jatkotaso
4. Luokat
5. Luokat Jatko

book
Rekurssio

Kuinka helposti rikkoa koodisi?

Miksi tämä voi rikkoa koodin? Koska se voi johtaa äärettömään rekursioon, mikä kuluttaa muistia loputtomasti ja heikentää laitteen suorituskykyä. Miksi sitten tarvitsemme rekursiota ollenkaan? Joissakin tapauksissa rekursio voi olla hyödyllinen, mutta sitä tulee käyttää harkiten. Esimerkiksi rekursio voi korvata while-silmukan. Tarkastellaan esimerkkiä, jossa rekursiota käytetään summan laskemiseen kaikista lukuun asti annetuista luvuista:

Main.java

Main.java

copy
1234567891011121314151617181920
package com.example; public class Main { // main method to run the application public static void main(String[] args) { // do not modify the code below System.out.println(calculateSum(5)); } // method to calculate the sum of numbers from 1 to num using recursion static int calculateSum(int num) { // if num is greater than 0, recursively calculate the sum if (num > 0) { num = num + calculateSum(num - 1); } else { return 0; } return num; } }

Metodi calculateSum() kutsuu itseään pienennetyillä arvoilla. Meillä on myös poistumiskohta tästä rekursiosta, kun muuttuja num on nolla. Tämä metodi laskee kaikkien lukujen summan 1:stä parametriin asti, tässä tapauksessa 5. Tarkastellaan vuokaaviota, joka havainnollistaa, miten rekursio toimii tämän metodin avulla:

Yllä oleva esimerkki havainnollistaa, miten metodi kutsuu itseään pienennetyillä arvoilla, ja kun se saavuttaa nollan, se palaa takaisin ylöspäin laskemalla summia yhteen. Voimme myös havaita, miten if-lohkon runko suoritetaan, jossa lisätään num metodikutsun palauttamaan arvoon pienemmällä arvolla. Väliarvot jokaisen metodikutsun jälkeen on merkitty nuolten viereen.

Voimmeko välttää rekursion käyttöä?

Rekursio voidaan myös korvata tavallisella silmukalla. Tarkastellaan esimerkkiä, jossa ensin käytetään rekursiivista metodia ja sitten for-silmukkaa saman toiminnon suorittamiseen:

Main.java

Main.java

copy
123456789101112131415161718192021222324252627282930313233
package com.example; public class Main { // main method to run the application public static void main(String[] args) { // do not modify the code below int num = 5; // printing the result of the recursive sum calculation System.out.println("Result using recursion: " + calculateSum(num)); int result = 0; // calculating the sum using a for-loop for (int i = 1; i <= num; i++) { result = result + i; } // printing the result of the sum calculation using the for-loop System.out.println("Result using for-loop: " + result); } // method to calculate the sum of numbers from 1 to num using recursion static int calculateSum(int num) { // if num is greater than 0, recursively calculate the sum if (num > 0) { num = num + calculateSum(num - 1); } else { return 0; } return num; } }

Tässä näemme, kuinka korvaamme rekursiivisen metodimme tavallisella for-silmukalla, käyttäen muuttujaa i kasvattamaan result-arvoa jokaisella kierroksella lisäämällä siihen i, kunnes se saavuttaa määritetyn luvun num, joka on metodin parametri.

Yhteenveto

Yhteenvetona voidaan todeta, että rekursiiviset metodit voivat olla hyödyllisiä, mutta myös riskialttiita. Rekursion voi usein korvata silmukoilla, ja vaikka se voi yksinkertaistaa tiettyjä tehtäviä, se voi myös aiheuttaa ongelmia, jos sitä ei käytetä huolellisesti. Jos päätät käyttää rekursiota, toimi varoen, vaikka olisit kokenutkin.

1. Mitä rekursio tarkoittaa Javassa?

2. Kumpi on parempi käyttää, rekursio vai tavallinen silmukka?

question mark

Mitä rekursio tarkoittaa Javassa?

Select the correct answer

question mark

Kumpi on parempi käyttää, rekursio vai tavallinen silmukka?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 7
some-alt