Rekursjon og flere returverdier
Funksjoner som kaller seg selv og forgrener seg.
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 1Returner 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. 🎯
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
- Funksjonssyntaks og returtyper
- Sende verdier kontra referanser
- pub-funksjoner og synlighet
- Rekursjon og flere returverdier