Tehetséggondozás az informatikában
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
10
100 é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))