Sunteți pe pagina 1din 5

PROIECT DIDACTIC

06.10.2022
Disciplina: Informatică
Clasa: a XII-a
Profesor:  Ciobanu Serghei
Subiectul lecției: Recursia
  Tipul lecţiei: - dobândire de noi cunoştinţe
Unitatea de competență: Utilizarea recursiei în rezolvarea de probleme
Obiectivele operaționale ale lecției:
O1- să identifice modul de apariție a recursiei
O2 –să resolve problem utilizând recursia
O3-să organizeze comunicarea între progamul/subprogramul appellant și subprogamul apelat
Strategii didactice:
Ø  Metode de învăţământ:
-          metode de comunicare orală: expunere, conversaţie, problematizare;
-          metode de acţiune: exerciţiul, învăţare prin descoperire;
Ø  Procedee de instruire:
-          explicaţia în etapa de comunicare;
-          învăţarea prin descoperire, prin rezolvarea de probleme;
-          problematizarea prin crearea situaţiilor problemă;
-          conversaţia de consolidare a cunoştinţelor în etapa de fixare a cunoştinţelor;
Ø  Forme de organizare: frontală şi individuală;

Ø  Resurse materiale:
-          Anatol Gremalschi – Informatica. Manual pentru clasa a 11-a, Știința, 2008;
-          fişe de lucru;
Ø  Metode de evaluare:
-          evaluare iniţială: întrebări orale;
-          set de aplicaţii;
SCENARIUL LECȚIEI
 Moment organizatoric:
¨     
¨      organizarea şi pregătirea clasei:
-          verificarea frecvenţei;
¨      captarea atenţiei clasei:
-          anunţarea subiectului pentru tema respectivă;
-          anunţarea obiectivelor urmărite;
-          anunţarea modului de desfăşurare a activităţii;

 Reactualizarea cunoştinţelor
1. Se realizează un set de întrebări pentru reactualizarea cunoştinţelor teoretice ca mai jos:
Întrebare Răspuns aşteptat

1. Unde sunt memorate variabilele Segmentul de stivă


locale?

2. Care este ordinea în care parametri Memorarea parametrilor transmişi se face în ordinea
transmiţi sunt memoraţi? în  care aceştia figurează în antet: de la stânga la
dreapta.

3. Ce conţine stiva când parametrii sunt Valorile transmise


transmişi prin valoare?

4. Dar prin referinţă? Adresele variabilelor

5. Numele parametrilor formali trebuie să Nu


fie acelaşi cu cel al parametrilor efectivi?
 Comunicarea noilor cunoştinţe:
DEFINIŢIA RECURSIVITĂŢII
Recursivitatea reprezintă o tehnică de programare de o importanţă deosebită. Ea permite o
exprimare extrem de concisă şi clară a algoritmilor de rezolvare a unor probleme complexe.
Un subprogram este recursiv dacă se apelează pe el însuşi (se autoapelează).
REALIZAREA AUTOAPELULUI  
Considerăm următorul subprogram:
Program p1;
Var n:integer;
Procedure  exemplu ( n: integer);
begin
  if (n<>0) then begin
writeln(n);
     exemplu(n-1);
end;
end;
 
begin
 exemplu(3);
End.
Programul afişează:
3
2
1
În cazul acestui program
Program p2;
Function suma( n: integer)
begin
  if (n<>0) then
suma:= n+suma(n-1);
end;
begin
write(suma(3));
end.
Deşi în stivă sunt introduse şi apoi extrase aceleaşi elemente, funcţia  poate fi utilizată  în
expresia ce va fi returnată şi astfel putem calcula 1+2+3. Programul afişează 6.
Diferenţa dintre cele două subprograme este următoarea:
•         În cazul procedurii, autoapelul se realizează prin apelul procedurii respective, din interiorul
ei. Apelul se face la fel ca în cazul în care procedura este apelată din exterior.
•                 În cazul funcţiilor, autoapelul se realizează prin instrucţiunea de atribuire.
MECANISMUL  RECURSIVITĂŢII
Considerăm următoarea problemă:
Să se calculeze recursiv n!.
Pentru înţelegerea noţiunii de factorial aleg doi şi apoi trei copii şi căutăm toate
posibilităţile de aşezare pe 2 sau 3 scaune. De aici, deducem că
2!=2*1!=2*1*0!= 2*1*1=2
3!=3*2!=3*2*1!=3*2*1*0!=3*2*1*1=6
Prin generalizare, obţinem
n!=n*(n-1)!=n*(n-1)*(n-2)!=…=n*(n-1)*(n-2)*…*3*2*1
Definiţia recursivă a lui n! este:
 
Subprogramul fact transcrie definiţia recursivă.
Program p3;
Var n: integer;
Function fact ( n:integer)
begin
 if (n==0)  fact:= 1;
      else  fact:= n*fact(n-1);
end;
begin
 read(n);
write(n);
write(`n!=’, fact(n));
end.
CUM GÂNDIM UN ALGORITM RECURSIV?
•         Ce se întâmplă la un nivel se întâmplă la orice nivel.
•         Subprogramul care se autoapelează trebuie să conţină instrucţiunile corespunzătoare unui
nivel.
•         Starea tratată de subprogram se găseşte pe un anumit nivel al stivei.
Observaţii
•         Pentru orice algoritm recursiv există unul iterativ care rezolvă aceeaşi problemă.
•         Nu întotdeauna alegerea unui algoritm recursiv reprezintă un avantaj.
•         Recursivitatea presupune mai multă memorie în comparaţie cu iterativitatea.
 
 
Asigurarea feedback-ului şi evaluarea performanţei
Întrebare Răspuns
aşteptat

1)  Orice subprogram recursiv se poate implementa şi nerecursiv A

2)  Programul principal poate conţine autoapel. F

3)  La fiecare apel recursiv al unui subprogram, in segmentul de stiva sunt c)


memorate
a)  Adresa de revenire, valorile variabilelor locale si a parametrilor
transmişi prin referinţă
b)  Adresa de revenire si valorile variabilelor  globale
c)  Adresa de revenire, valorile variabilelor locale si a parametrilor
transmişi prin valoare si adrese parametrilor transmişi prin referinţa
d) Adresa de revenire, valorile locale si a variabilelor globale

4)  Fie funcţia recursivă: d)


function f( n:integer)
begin
if (n ==0 ) f:= 0;
else f:= f(n-1)+2*n-1
end.
Precizaţi valoarea lui n pentru care f(n)= 36
a)  9
b)  3
c)  15
d) 6

 
Temă:
1. Fie A o mulţime cu n elemente. Submulţimile ordonate ale lui A având fiecare câte k
elemente, unde 0≤k≤n, se numesc aranjamente de n luate câte k. Două aranjamente de n
elemente luate câte k se deosebesc prin natura elementelor lor şi prin ordinea lor.
Numărul total de aranjamente de n elemente luate câte k se notează cu şi se calculează
după formula: .  Să se scrie un program ce calculează aranjamentele unei mulţimi de n
elemente luate câte k.
2. Se consideră un şir de n valori naturale de cel mult 9 cifre. Determinaţi numărul de valori
care pot fi scrise sub forma k!. În cadrul subprogramului, se vor defini două subprograme
recursive:
a. Funcţia Ok, care verifică dacă o valoare primită printr-un parametru reprezintă
factorialul unei valori. Funcţia returnează valoarea 1 sau 0.
b. Funcţia Nr, care permite citirea celor n numere şi returnează numărul de valori
factoriale. În cadrul ei se va apela funcţia Ok.
Exemplu: Pentru n=5 şi valorile 7, 16, 6, 13, 24, se va afişa 2, deoarece 6=1*2*3,
24=1*2*3*4.

S-ar putea să vă placă și