Zig Academy · Oppitunti

Rekursio ja useat palautusarvot

Funktiot, jotka kutsuvat itseään ja haarautuvat.

Oppitunti 4/413 vaihetta

Rekursio ja useat palautusarvot on ilmainen Zig Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Zig Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Zig Academy-kurssilla on yhteensä 4 oppituntia.

Funktio kutsuu itseään

Rekursio tarkoittaa, että funktio kutsuu itseään ratkaistakseen saman ongelman pienemmän osan vaiheittain. 🔁

Jokainen rekursio tarvitsee perustapauksen

Perustapaus on pysäytyskohta. Ilman sitä funktio kutsuisi itseään loputtomasti ja pinon tila loppuisi.

Rekursiivinen tapaus

Rekursiivinen tapaus kutsuu funktiota uudelleen pienemmällä syötteellä ja etenee tasaisesti kohti perustapausta.

fn factorial(n: u64) u64 {
    if (n <= 1) return 1;
    return n * factorial(n - 1);
}

Seuraa pientä kutsua

Kutsu factorial(3) muuttuu muotoon 3 * factorial(2) ja sitten muotoon 2 * factorial(1). Perustapaus palauttaa arvon 1, ja vastaukset kertautuvat paluumatkalla.

Rekursio käyttää pinoa

Jokainen kutsu lisää pinoon uuden kehyksen. Liian monta tasoa aiheuttaa pinon ylivuodon, joten rekursion syvyys kannattaa pitää kohtuullisena.

Monet ongelmat ratkaistaan silmukalla

Kaiken rekursiivisen voi kirjoittaa myös silmukkana. Silmukat välttävät ylimääräiset pinokehykset, joten ne ovat usein turvallisempi valinta.

fn factorial(n: u64) u64 {
    var acc: u64 = 1;
    var i: u64 = 2;
    while (i <= n) : (i += 1) acc *= i;
    return acc;
}

Funktio palauttaa yhden tyypin

Zig-funktiolla on yksi palautustyyppi, mutta se voi sisältää useita return-lauseita, jotka kaikki tuottavat kyseisen tyypin arvon.

Varhaiset palautukset haarauttavat suoritusta

Voitte palauttaa arvon aikaisin eri haaroista. Jokainen suorituspolku palauttaa ilmoitetun tyypin arvon ja poistuu heti funktiosta.

fn sign(n: i32) i32 {
    if (n > 0) return 1;
    if (n < 0) return -1;
    return 0;
}

Palauta useita arvoja struct-rakenteessa

Jos haluatte palauttaa useita arvoja, palauttakaa struct- tai tuple-rakenne, joka kokoaa ne yhdeksi tulokseksi.

fn divmod(a: u32, b: u32) struct { q: u32, r: u32 } {
    return .{ .q = a / b, .r = a % b };
}

Pura tulos

Kutsuja lukee kootun tuloksen kentät nimen perusteella, esimerkiksi result.q ja result.r, ja käyttää kutakin palautettua osaa.

const res = divmod(7, 2);
// res.q is 3, res.r is 1

Palauta myös virheitä

Funktio voi palauttaa virheyhdistelmän, jolloin yksi haara voi ilmoittaa epäonnistumisesta muiden palauttaessa tavallisen arvon.

Pikatarkistus

Kirjoititte rekursiivisen funktion, mutta se ei koskaan lopeta ja kaatuu. Mitä todennäköisesti unohditte?

Kertaus

Rekursio tarvitsee perustapauksen ja sitä kohti pienenevän rekursiivisen kutsun. Funktiolla on yksi palautustyyppi mutta useita palautuspolkuja, ja struct kokoaa useita tuloksia. 🎯

Aloita maksutta

Opi Zig tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
30
Oppitunnit
120

Usein kysytyt kysymykset

Onko oppitunti ”Rekursio ja useat palautusarvot” ilmainen?

Kyllä – oppitunnin ”Rekursio ja useat palautusarvot” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Zig Academy-kurssin, päivitä CoddyKit PROhon. Zig Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Rekursio ja useat palautusarvot”?

Funktiot, jotka kutsuvat itseään ja haarautuvat. Harjoittelet Zig Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Zig Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Zig Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”Rekursio ja useat palautusarvot”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Zig Academy-oppitunnilla?

Kyllä. Jokainen Zig Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Funktioiden syntaksi ja palautustyypit
  2. Arvojen ja viitteiden välittäminen
  3. pub-funktiot ja näkyvyys
  4. Rekursio ja useat palautusarvot
← Takaisin: Zig Academy