Rekursioon johdatteleva lisätehtävä.

Tämän tehtävän tarkoituksena on johdattaa rekursioon käyttämiseen ohjelmoinnissa. Jos koet jo ymmärtäväsi rekursion hyvin, niin kannattaa siirtyä suoraan viikon 2 TMC-tehtäviin.

Javan File-luokka sisältää helppokäyttöisiä funktioita kansion tiedostojen ja kansioiden listaamiseen, niiden nimien kyselyyn ja alikansioon siirtymiseen. Komennolla

File rootFolder = new File(System.getProperty("user.dir"));
        
pääset käsiksi projektikansioon. Mikäli File-tyyppinen olio f viittaa kansioon, voidaan kaikki kansion tiedostot ja alikansiot listata komennolla f.listFiles(). Komento f.getName() palauttaa sen kansion/tiedoston nimen, johon olio f viittaa. Metodien f.isFile() ja f.isDirectory() avulla voidaan selvittää, viittaako f tiedostoon vaiko kansioon.

Tehtävä jakaantuu kolmeen osaan.

  1. Toteuta funktio void tulosta(File kansio), joka tulostaa annetun kansion tiedostot ja alikansiot.
  2. Muuta edellisessä osassa kirjoittamaasi metodia siten, että aina sen jälkeen kun ollaan tulostettu alikansion nimi, niin kutsutaan uutta metodia void tulosta2(File kansio) tälle alikansiolle. Metodi tulosta2 tulostaa annetusta kansiosta kaikkien tiedostojen ja alikansioiden nimet. (Mitä huomaat tulosta ja tulosta2 koodien rakenteesta?)
  3. Miten voisit muuttaa metodia tulosta siten, että se tulostaa kaikki alikansioiden alikansioissakin ja alikansioiden alikansioiden alikansioissakin jne. vaikka sisäkkäisiä alikansiokerroksia olisi esimerkiksi 1000 tai enemmän? (Ja ilman, että sinun tarvitsee toteuttaa tulosta3, tulosta4, ...,tulosta1000.)