6  Følgjer

På førre side såg me eit kjapt døme på ei talfølgje,

\[1, 2, 3, 4, 5, ...\]

Av denne talfølgja ser me to ting. For det første er ho uendeleg, sidan det ikkje er definert nokon ende, berre “…”. Me ser og at det er ein fast differanse mellom kvart av ledda. Talfølgjer med fast differanse mellom ledda kallar me aritmetiske talfølgjer.

6.1 Aritmetiske følgjer

Eit anna døme på ei aritmetisk talfølgje er denne

\[ 3, 7, 11, 15, ...\]

Her ser me at det første leddet \(a_1 = 3\) og at differansen \(d=4\).

At det er ein fast differanse mellom kvart av ledda betyr at dersom me skal finna eit ledd (\(a_n\)), må me ta leddet før (\(a_{n-1}\)) og legga til differansen (\(d\)). Dermed får me

\[a_{n} = a_{n-1} + d\]

Frå dømet over ser me at det stemmer, \(7 = 3 + 4\) og \(11 = 7 + 4\) osb.

6.1.1 Rekursiv formel for ledd n

Samanhengen over kan me nytta for å finna \(a_n\) rekursivt. Rekursjon handlar om gjentaking, så tanken er at me kan gjenta formelen for å finna ledd \(n\). Me kan laga ein funksjon som kun tek utgangspunkt i opplysningen om at \(a_{n} = a_{n-1} + d\).

def a(n):
    return a(n-1) + 4

print(a(4))
RecursionError: maximum recursion depth exceeded

Men om du prøver å køyra denne koden vil du få ein feil:

RecursionError: maximum recursion depth exceeded

Om du ser på koden, ser du kanskje kva som er problemet?

Det let seg løysa om me definerer ein rekursjonsbotn (i dette tilfellet \(a_1\)). Me prøver på nytt:

def a(n):
    if n == 1:
        return 3
    else: 
        return a(n-1) + 4

print(a(4))
15

Denne funksjonen kan me bruka for å t.d. skriva ut dei 10 første ledda i følgja:

for i in range(1, 11):
    print(a(i), end = ", ")

print("...")
3, 7, 11, 15, 19, 23, 27, 31, 35, 39, ...

Ulempen med denne rekursive funksjonen er at han må gjennom alle dei føregåande ledda for kvart ledd du bruker han for å finna. Så om du skal finna \(a_1000\) vil formelen finna alle ledda før. Og på nytt når du ser etter \(a_1001\)… Det kan fort bli både tidkrevjande og tungvint, sjølv for datamaskina.

6.1.2 Eksplisitt formel for ledd n

Me kan sjå om me finn ein eksplisitt måte å finna \(a_n\) på (altså finna direkte, utan rekursjon). Me ser på dømet igjen.

\[3, 7, 11, 15, ...\]

Me ser at \[ \begin{aligned} a_2 &= 7 = 3 + 4 \\ a_3 &= 11 = 7 + 4 = 3 + 4 + 4 \\ a_4 &= 15 = 11 + 4 = 7 + 4 + 4 = 3 + 4 + 4 + 4 \end{aligned} \]

Altså er \[a_n = a_1 + (n-1)d\] som me kan programmera som

def a(n):
    return 3 + (n-1)*4

print(a(4))
15

Og igjen kan me skriva ut dei ti første ledda:f

for i in range(1, 11):
    print(a(i), end=", ")

print("...")
3, 7, 11, 15, 19, 23, 27, 31, 35, 39, ...