Zig Academy · leksjon

Rekursjon og flere returverdier

Funksjoner som kaller seg selv og forgrener seg.

Leksjon 4 av 413 trinn

Rekursjon og flere returverdier er en gratis leksjon i Zig Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Zig Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Zig Academy inneholder totalt 4 leksjoner.

En funksjon som kaller seg selv

Rekursjon er når en funksjon kaller seg selv for å løse en mindre del av det samme problemet, trinn for trinn. 🔁

All rekursjon trenger et basistilfelle

Basistilfellet er stoppunktet. Uten det ville funksjonen kalt seg selv for alltid og overfylt stakken.

Det rekursive tilfellet

Det rekursive tilfellet kaller funksjonen på nytt med et mindre inndata, slik at den stadig nærmer seg basistilfellet.

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

Følg et lite kall

Kallet factorial(3) blir til 3 * factorial(2), deretter 2 * factorial(1). Basistilfellet returnerer 1, og svarene multipliseres tilbake oppover.

Rekursjon bruker stakken

Hvert kall legger en ramme på stakken. For mange nivåer fører til stakkoverflyt, så hold rekursjonsdybden på et rimelig nivå.

Mange problemer løses heller med løkker

Alt som kan skrives rekursivt, kan også skrives som en løkke. Løkker unngår ekstra stakkrammer og er derfor ofte det tryggere valget.

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

En funksjon returnerer én type

En Zig-funksjon har én returtype, men kan ha mange return-setninger som alle produserer denne ene typen.

Tidlige returer gir flere grener

De kan returnere tidlig fra ulike grener. Hver bane returnerer en verdi av den deklarerte typen og avslutter funksjonen med én gang.

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

Returner flere verdier i en struct

For å returnere flere verdier kan De returnere en struct eller tuple som samler dem i ett resultat.

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

Pakk ut resultatet

Kalleren leser de samlede feltene etter navn, for eksempel result.q og result.r, for å bruke hver returnerte del.

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

Returner også feil

En funksjon kan returnere en feilunion, slik at én gren kan signalisere feil mens andre returnerer en vanlig verdi.

Hurtigsjekk

De skriver en rekursiv funksjon, men den stopper aldri og krasjer. Hva har De mest sannsynlig glemt?

Oppsummering

Rekursjon trenger et basistilfelle og et mindre rekursivt kall. En funksjon har én returtype, men mange returbaner, og en struct samler flere resultater. 🎯

Gratis å komme i gang

Lær deg Zig med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
30
Leksjoner
120

Ofte stilte spørsmål

Er leksjonen «Rekursjon og flere returverdier» gratis?

Ja – hele teksten i «Rekursjon og flere returverdier» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Zig Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Zig Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Rekursjon og flere returverdier»?

Funksjoner som kaller seg selv og forgrener seg. Du øver på Zig Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Zig Academy?

Ingen tidligere erfaring er nødvendig. Zig Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.

Hvor lang tid tar leksjonen «Rekursjon og flere returverdier»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Zig Academy-leksjonen?

Ja. Alle Zig Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Funksjonssyntaks og returtyper
  2. Sende verdier kontra referanser
  3. pub-funksjoner og synlighet
  4. Rekursjon og flere returverdier
← Tilbake til Zig Academy