Elemi példák

A rekurzív programokat általában nehéznek tekintjük (és nem ritkán valóban azok is), de elemi szinten sokszor nem kell mást tennünk, mint a matematikai definíciót mechanikusan átültetni a programozási nyelvre.

A számtani és a mértani sorozat gondolata már az általános iskolában felbukkan. Az n. tag értékét kiszámító rekurzív program működésének részletei nem feltétlenül érthetőek a témával ismerkedő diáknak, de a működés ténye annál meggyőzőbb lehet.

Az első –python nyelvű– programban a kiírás egyszerűsége érdekében egész számokra korlátozzuk a működést, ennek nyilván nincs érdemi jelentősége:

def a(a1, d, n):
    if n==1:
        return a1
    else:
        return a(a1, d, n-1)+d

print('Meghatározzuk egy számtani sorozat n. tagját.')
a1= int(input('Mi legyen a sorozat kezdő tagja? '))
d = int(input('Mi legyen a sorozat differenciája? '))
n = int(input('Hányadik tag értékét számítsuk ki? '))

print('A(z) %d kezdőtagú, %d differenciájú számtani sorozat %d. tagja %d' % (a1, d, n, a(a1, d, n)))

Mértani sorozat esetén megengedjük a törtszámokat is:

def g(g1, q, n):
    if n==1:
        return g1
    else:
        return g(g1, q, n-1)*q

print('Meghatározzuk egy mértani sorozat n. tagját.')
g1= float(input('Mi legyen a sorozat kezdő tagja? '))
q = float(input('Mi legyen a sorozat kvóciense? '))
n = int(input('Hányadik tag értékét számítsuk ki? '))

print('A(z) %f kezdőtagú, %f kvóciensű mértani sorozat %d. tagja %f' % (g1, q, n, g(g1, q, n)))

A faktoriálisok kapcsán érdemes megfigyelni, hogy a python a megszokottnál jóval nagyobb egész számokat is kezel, sőt 70 faktoriálisát is kiszámítja (a legtöbb zsebszámológép esetén 69! az utolsó: utána meghaladjuk 10100 értékét).

def f(n):
    if n==0:
        return 1
    else:
        return f(n-1)*n

print('Meghatározzuk az n természetes szám faktoriálisát.')
n = int(input('Mi legyen n értéke? '))

print('A(z) n természetes szám faktoriálisa %d' % f(n))