1.7
Rekursive samanhengar og programmering

1.7 Rekursive samanhengar og programmering

Utforske følgjer med programmering.

55 min
9 oppgaver
RekursjonProgrammeringPythonSimulering
Du leser den tradisjonelle versjonen
Din fremgang i kapitlet
0 / 9 oppgaver
Kapitlets plass i kurset

Programmering og rekursjon

Programmering er eit kraftig verktøy for å utforske matematiske samanhengar. Vi kan bruke Python til å generere følgjer, rekne ut summar og simulere rekursive prosessar.

Rekursjon

Ein rekursiv definisjon definerer ein verdi ved hjelp av tidlegare verdiar.

For følgjer: an=f(an−1,an−2,…)a_n = f(a_{n-1}, a_{n-2}, \ldots)

Ein rekursiv definisjon treng alltid startverdiar (grunntilfelle).

✏️Døme 1: Aritmetisk følgje i Python

Skriv eit program som genererer dei 10 første ledda i følgja an=3+5(n−1)a_n = 3 + 5(n-1).

# Rekursiv metode
a = 3  # Startverdi
for n in range(1, 11):
    print(f"a_{n} = {a}")
    a = a + 5  # a_n = a_{n-1} + 5

Utskrift:
a1 = 3, a2 = 8, a3 = 13, ..., a10 = 48

Svar: Dei ti første ledda er 3,8,13,18,23,28,33,38,433, 8, 13, 18, 23, 28, 33, 38, 43 og 4848.

📝Oppgave 1

Skriv eit Python-program som genererer dei 15 første ledda i følgja med a1=10a_1 = 10 og d=−3d = -3.

✏️Døme 2: Fibonacci i Python

Skriv eit program som reknar ut dei 20 første Fibonacci-tala.

fib = [1, 1]
for i in range(2, 20):
    fib.append(
        fib[i - 1] + fib[i - 2]
    )

for i, f in enumerate(fib, 1):
    print(f"F_{i} = {f}")

Utskrift: F1 = 1, F2 = 1, F3 = 2, ..., F20 = 6765

Svar: Det tjugande Fibonacci-talet er F20=6765F_{20} = 6765.

📝Oppgave 2

Rekn ut forholdet FnFn−1\displaystyle \frac{F_n}{F_{n-1}} for store nn. Kva skjer?

Rekursive funksjonar

Ein rekursiv funksjon er ein funksjon som kallar seg sjølv. Han må ha eit grunntilfelle som stoppar rekursjonen.

✏️Døme 3: Fakultet rekursivt

Implementer fakultet n!=n⋅(n−1)!n! = n \cdot (n-1)! som ein rekursiv funksjon.

def fakultet(n):
    if n <= 1:
        return 1
    return n * fakultet(n - 1)

for i in range(10):
    print(f"{i}! = {fakultet(i)}")

Svar: Funksjonen fakultet kallar seg sjølv med n−1n - 1 til grunntilfellet n≤1n \le 1 og skriv ut 0!=10! = 1, 1!=11! = 1, 2!=22! = 2, …, 9!=362 8809! = 362\,880.

📝Oppgave 3

Skriv ein rekursiv funksjon for det n-te Fibonacci-talet.

✏️Døme 4: Simulere sprettball

Simuler ein ball frå 10 m som spretter til 80 % av førre høgd.

h = 10
total = h
while h > 0.001:
    h = h * 0.8
    total += 2 * h

print(
    "Total strekning:"
    f" {total:.2f} m"
)

Utskrift: Total strekning: 89.99 m

Den teoretiske totalstrekninga er 10+2⋅81−0,8=90\displaystyle 10 + 2 \cdot \frac{8}{1 - 0{,}8} = 90 m. Løkka stoppar når spretthøgda er under 0,0010{,}001 m, så summen blir litt mindre enn 9090 m.

Svar: Simuleringa gir 89,9989{,}99 m, litt mindre enn den teoretiske totalstrekninga på 9090 m.

📝Oppgave 4

Modifiser programmet til å finne når ballen spretter under 1 cm.

✏️Eksempel 5: Delsummar av ei geometrisk rekkje

Skriv eit program som reknar ut delsummane S1,S2,…,S20S_1, S_2, \ldots, S_{20} av rekkja 1+12+14+18+⋯\displaystyle 1 + \frac{1}{2} + \frac{1}{4} + \frac{1}{8} + \cdots, og samanlikn med summen a11−k\displaystyle \frac{a_1}{1-k}.

a = 1      # første ledd
k = 0.5    # kvotient
S = 0
for n in range(1, 21):
    S = S + a
    a = a * k
    print(n, S)

Utskrift (utdrag):

nnSnS_n
11
21,5
31,75
101,998047
201,999998

Summen av den uendelege rekkja er a11−k=11−0,5=2\displaystyle \frac{a_1}{1-k} = \frac{1}{1-0{,}5} = 2.
Svar: Delsummane nærmar seg 22, som stemmer med summeformelen.
📝Oppgave 5

Bruk programmet frå eksempel 5.

a

Endre programmet slik at det stoppar første gong SnS_n ligg nærare 22 enn 0,0010{,}001, og skriv ut nn.

b

Rekkja 3+3⋅0,75+3⋅0,752+⋯3 + 3 \cdot 0{,}75 + 3 \cdot 0{,}75^2 + \cdots konvergerer. Finn summen, og bruk eit program til å finne kor mange ledd som trengst før delsummen ligg nærare summen enn 0,010{,}01.

Løs oppgaven

Oppsummering

Rekursjon i programmering:
- Rekursive definisjonar kan implementerast som rekursive funksjonar
- Alternativt bruker vi løkkjer (iterasjon)
- Rekursive funksjonar må alltid ha eit grunntilfelle

Typiske bruksområde:

ProblemRekursiv formel
Aritmetisk følgjean=an−1+da_n = a_{n-1} + d
Geometrisk følgjean=k⋅an−1a_n = k \cdot a_{n-1}
FibonacciFn=Fn−1+Fn−2F_n = F_{n-1} + F_{n-2}
Fakultetn!=n⋅(n−1)!n! = n \cdot (n-1)!
Repetisjonsoppgåver
Din fremgang
0deloppgaver0 / 5 oppgaver

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.