Tétel
2 pont jár hivatalból. Munkaidő: 45 perc.
1.
Milyen értékeket térítenek vissza az f(15,20), f(2,10), f(1000,1), f(1000000, 57) hívások az alábbi f függvény esetén? Az első kettőt kövessük nyomon, a másik kettőnél indokoljuk, hogy miért! – 4 x 0.5p
| |
Megoldás:
f(15, 20) = f(15, 5) = f(10, 5) = f(5, 5) = 5
f(2, 10) = f(2, 8) = f(2, 6) = f(2, 4) = f(2, 2) = 2
A függvény a két argumentum legnagyobb közös osztóját téríti vissza (euklideszik algoritmus), tehát:
f(1000, 1) = 1
f(1000000, 57) = 1
2.
Mit írnak ki és mi a visszatérített értéke az g(3), illetve g(1) hívásoknak? Kövessük nyomon! – 1p
| |
Megoldás:
g(3)
| cout << "a"
| k = g(6)
| | cout << "a"
| | k = g(9)
| | | cout << "a"
| | | k = g(12)
| | | | cout << "a"
| | | | k = 12
| | | | cout << "b"
| | | | return 12
| | | []
| | | k = 12
| | | cout << "b"
| | | return 12
| | []
| | k = 12
| | cout << "b"
| | return 12
| []
| k = 12
| cout << "b"
| return 12
[]
Kimenet: aaaabbbb
Visszatérített érték: 12
g(1)
| cout << "a"
| k = g(4)
| | cout << "a"
| | k = g(7)
| | | cout << "a"
| | | k = g(10)
| | | | cout << "a"
| | | | k = g(13)
| | | | | cout << "a"
| | | | | k = 13
| | | | | cout << "b"
| | | | | return 13
| | | | []
| | | | k = 13
| | | | cout << "b"
| | | | return 13
| | | []
| | | k = 13
| | | cout << "b"
| | | return 13
| | []
| | k = 13
| | cout << "b"
| | return 13
| []
| k = 13
| cout << "b"
| return 13
[]
Kimenet: aaaaabbbbb
Visszatérített érték: 13
3.
Kövessük nyomon a kiir(5) hívást! Mi kerül a képernyőre? – 1p
| |
Megoldás:
KIMENET: 5 4 3 2 1 0 1 2 3 4 5
kiir(5)
| cout << 5
| kiir(4)
| | cout << 4
| | kiir(3)
| | | cout << 3
| | | kiir(2)
| | | | cout << 2
| | | | kiir(1)
| | | | | cout << 1
| | | | | kiir(0)
| | | | | | cout << 0
| | | | | []
| | | | | cout << 1
| | | | []
| | | | cout << 2
| | | []
| | | cout << 3
| | []
| | cout << 4
| []
| cout << 5
[]
4.
Adott egy n elemű sorozat, határozzuk meg a páros elemeinek összegét rekurzívan két különböző megoldással: utolsó elem leválasztása, illetve kettévágva a tömböt (divide et impera)! Az alábbi függvényeket kell megírni: – 2x1p
int sum_paros_rek(int n, int t[]);
int sum_paros_divimp(int t[], int bal, int jobb);
(Az utóbbi esetén sum_paros_divimp(t, 0, n-1), lenne kezdetben a hívás, ahol n az elemek száma.)
Megoldás:
| |
5.
Adott egy természetes szám. Adjuk meg a legnagyobb számjegyét rekurzívan kétféleképpen: egyszer visszatérített érték legyen, aztán pedig egy második paraméteren keresztül visszaküldött érték! Teljes programot kell írni a két függvénnyel, a main hívja meg mindkettőt a felhasználó által beírt értékre. – 2x1p
Megoldás:
| |