Utforske følger med programmering.
Når datamaskinen tar trappen
Husker du skillet mellom heisen og trappen fra kapittel 1.1 — eksplisitte formler som tar oss rett til svaret, og rekursive som går steg for steg? For en menneskehjerne er trappen slitsom: å regne ut Fibonacci-tall nummer femti for hånd er en hel ettermiddags arbeid. For en datamaskin er det mikrosekunder.
Programmering og rekursjon er som skapt for hverandre. En rekursiv definisjon sier «neste verdi lages av de forrige» — og det er nøyaktig det en løkke i Python gjør, runde etter runde. Enda mer slående: et program kan inneholde en funksjon som kaller seg selv, en slags matematisk speilkabinett som likevel gir presise svar. I dette kapittelet bruker vi Python til å generere følger, beregne Fibonacci-tall og fakulteter, og simulere sprettballen fra kapittel 1.5 — og du vil se at noen få linjer kode kan erstatte timevis med håndregning.
Følger som løkker
En rekursiv definisjon består av to deler: startverdier (basistilfellet) og en regel som lager nye ledd av gamle. I Python blir dette en variabel som oppdateres i en løkke.
Ta den aritmetiske følgen , som rekursivt er og :
a = 3 # startverdi
for n in range(1, 11):
print(f"a_{n} = {a}")
a = a + 5 # regelen: neste ledd = forrige + 5Programmet skriver ut , , og videre til . Linjen a = a + 5 er den rekursive regelen, oversatt til kode.
Fibonacci-følgen trenger to startverdier, og da er en liste praktisk:
fib = [1, 1]
for i in range(2, 20):
fib.append(fib[i-1] + fib[i-2])Her bygger fib[i-1] + fib[i-2] neste tall av de to forrige — nøyaktig — og etter løkken vet vi at . Det som tok middelalderens regnemestere dager, tar maskinen et øyeblikk.
Funksjoner som kaller seg selv
Løkker er én måte å programmere rekursjon på. Den andre er mer forbløffende: en rekursiv funksjon kaller seg selv. Ta fakultet, definert ved med :
def fakultet(n):
if n <= 1:
return 1
return n * fakultet(n - 1)Kaller du fakultet(4), regner funksjonen , som regner , som regner — og der stopper det, for basistilfellet if n <= 1: return 1 slår inn. Svarene ruller så tilbake: , , . Uten basistilfellet ville funksjonen kalt seg selv i evighet — rekursjonens svar på en dominorekke uten ende.
Rekursjon i kode er også et utforskningsverktøy. Husker du sprettballen som spratt til av forrige høyde? Vi kan simulere den:
h = 10
total = h
while h > 0.001:
h = h * 0.8
total += 2 * h
print(f"Total strekning: {total:.2f} m")Programmet svarer meter — og formelen for uendelige geometriske rekker gir meter eksakt. Simulering og teori bekrefter hverandre. Slik bruker matematikere programmering i praksis: koden gir hypoteser og kontrollregning, teorien gir visshet.
Oppsummering: matematikk som kjører
I dette kapittelet møttes to verdener: følgenes rekursive definisjoner og programmeringens løkker og funksjoner. En rekursiv sammenheng — startverdier pluss en regel som lager neste ledd av de forrige — oversettes direkte til kode, enten som en løkke der en variabel oppdateres (a = a + 5 for aritmetiske følger, fib[i-1] + fib[i-2] for Fibonacci) eller som en rekursiv funksjon som kaller seg selv, slik fakultet(n) beregner . Den ufravikelige regelen er basistilfellet: hver rekursjon trenger en stoppbetingelse, akkurat som hvert induksjonsbevis trenger et basissteg.
Mønstrene du nå kan programmere, er kapittelets fire gjengangere: aritmetisk , geometrisk , Fibonacci og fakultet . Og sprettball-simuleringen viste arbeidsdelingen mellom kode og teori: programmet ga meter, rekkeformelen ga eksakt. Med følger, rekker, konvergens, induksjon og programmering i verktøykassa er du klar for neste store tema i R2 — integralregningen.
Dette kapitlet er skrevet av Anthropics toppmodeller (Claude Opus og Claude Fable) og er foreløpig ikke manuelt gjennomgått — kvalitetskontrollen gjøres av uavhengige KI-agenter, og innmeldte feil rettes fortløpende. Funnet en feil? Meld fra, så retter vi den. Les mer om hvordan innholdet lages.
