Középiskolai Matematikai és Fizikai Lapok
Informatika rovattal
Kiadja a MATFUND Alapítvány
Már regisztráltál?
Új vendég vagy?

Az I. 259. feladat (2011. február)

I. 259. A rekurzió a matematikában és az informatikában gyakran használt eszköz. A probléma megoldás különböző fázisaiban, így a specifikációban, az algoritmikus tervezésben és a programnyelven történő kódolásban fordulhat elő.

A specifikáció megadására függvényt szokás használni, amely a bemenet és a kimenet között hatékonyan adja meg a kapcsolatot. Kezdésként nézzük a hatványozás műveletét. Ennek definíciója: \(\displaystyle x^{n} =x\cdot x^{n-1}\), és \(\displaystyle x^{0}=1\), másképpen:

\(\displaystyle \mathop{\text{hatvány}}\, (x,n)= \begin{cases} 1 & \text{ha } n=0, \\ x\cdot \mathop{\text{hatvány}}\, (x,n-1) & \text{ha } n>0. \end{cases} \)

Így tehát az \(\displaystyle 5^{3}\)-t visszavezetjük \(\displaystyle 5\cdot 5^{2}\)-ra, vagyis \(\displaystyle 5^{2}\)-ra, azt \(\displaystyle 5^{1}\)-re, végül azt az \(\displaystyle 5^{0}\)-ra, amit már nem vezetünk vissza. A feladat rekurzív algoritmussal hatékonyan megoldható:

Funkcionális programozási nyelven, például Imagine Logo-ban a kódolás természetesen következik:

A nemrekurzív nyelvek is engedélyezhetik a kódolást, így például Pascal nyelven a kód:

Az iteratív módon meghatározott algoritmusok, programok átírhatók rekurzívvá. A legfontosabb algoritmikus egységekkel, a szekvenciával és az elágazással nincs gond, változtatás nélkül átvihetők. A ciklust tartalmazó eljárásokat kell rekurzívvá tenni. Az elöltesztelő ciklus átírása:

Minta: Állítsuk elő a természetes számok sorozatát \(\displaystyle A\)-tól \(\displaystyle B\)-ig (\(\displaystyle 1\le A,B\le 100\)). Például az Előállít(5, 10, Sor, 1) eljárás a Sor tömbbe elhelyezi az 5 6 7 8 9 10 számsort.

I. Iteratív megoldás:

II. Rekurzív megoldás:

Készítsünk programot, amely számsorozatokat állít elő úgy, hogy a programban ciklus utasítást nem használunk.

\(\displaystyle a)\) Írjunk függvényt, ami egy \(\displaystyle N\) (\(\displaystyle N\ge 1\)) magas számhegyet hoz létre! Példa: számhegy 5 Eredménye: 1 2 3 4 5 4 3 2 1;

\(\displaystyle b)\) Írjunk függvényt, ami egy \(\displaystyle N\) magas számhegységet hoz létre! Példa: számhegység 4 Eredménye: 1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1;

\(\displaystyle c)\) Írjunk függvényt, ami egy \(\displaystyle N\) magas számlépcsőt hoz létre! Példa: számlépcső 6 Eredménye: 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 6 6 6 6 6 6;

\(\displaystyle d)\) Írjuk fel az alábbi, rekurzív képlettel megadott sorozat első \(\displaystyle N\) elemét: \(\displaystyle a_{1}=-1\) és \(\displaystyle a_{n}=-4 - 3a_{n-1}\).

A program első argumentuma \(\displaystyle N\) értéke és a második egy kimeneti fájl legyen. A kimeneti fájlban soronként jelenítsük meg a sorozatok szóközzel elválasztott elemeit. (A fájlba íráskor se használjunk ciklust.)

Beküldendő a program forráskódja (i259.pas, i259.cpp, ...), valamint a program rövid dokumentációja (i259.txt, i259.pdf, ...), amely tartalmazza a megoldás rövid leírását, és megadja, hogy a forrásállomány melyik fejlesztő környezetben fordítható.

(10 pont)

A beküldési határidő 2011. március 10-én LEJÁRT.


Mintamegoldásként Szabó Attila (Pécs, Leőwey Klára Gimnázium, 10. osztály) tanuló munkáját közöljük: i259.pas


Statisztika:

11 dolgozat érkezett.
10 pontot kapott:Gema Barnabás, Hoffmann Áron, Kalló Kristóf, Seres Márk Dániel, Szabó 928 Attila.
9 pontot kapott:Barta 111 János, Kocsis 789 Mátyás, Leitereg András, Sztanka-Tóth Tamás, Varga 256 Erik.
7 pontot kapott:1 versenyző.

A KöMaL 2011. februári informatika feladatai