Documente Academic
Documente Profesional
Documente Cultură
Un program recursiv poate fi exprimat: A = M (A, B), unde M este mulţimea care
conţine instrucţiunile B şi pe A însuşi.
For While
utilizat atunci când se dorește o serie de utilizat atunci când se dorește o iterare
numere întregi succesive sau să se repete până când o anumită condiție este
o procedură de un anumit număr de ori îndeplinită, sau dacă se știe în avans câte
#include <stdio.h> rulări trebuie executate
#include <stdio.h>
int main() {
int i; int main() {
for(i=0; i<10; i++) int i=0;
{printf("%d - %d\n", while(i<10)
i, i*i);} {printf("%d - %d\n", i, i*i);
} i = i+1;}
}
#include<stdio.h>
int main()
{
int i;
for(i=1;i<=10;i++)
{
printf("%5d\n",i);
}
return 0;
}
#include <stdio.h>
int main(void)
{
int i, n;
printf("tabela patratelor.\n");
printf("Scrie limita tabelului:
");
scanf("%d", &n);
i = 1;
while (i <= n)
{
printf("\t%d\t%d\n", i, i * i);
i++;
}
return 0;}
Exprimarea recursivităţii în C:
• funcţia recursivă este o funcţie care se apelează pe ea însăşi direct, în sensul că o
funcţie F conţine o referinţă la ea însăşi indirectă (o funcţie F conţine o referinţă la o
funcţie X care include o referinţă la F)
Exemplu: factorialul
Demonstrarea corectitudinii cuprinde doi paşi:
• pentru n=1 valoarea 1 care se atribuie factorialului, este corectă
• pentru n>1, presupunând corectă valoarea calculată pentru predecesorul lui n
de către fact(n-1), prin înmulţirea acesteia cu n se obţine valoarea corectă a
factorialului lui n.
Observaţii:
• Orice funcţie recursivă trebuie să conţină (cel puţin) o instrucţiune if, de obicei
chiar la început, prin care se verifică dacă (mai) este necesar un apel recursiv sau
se iese din funcţie!
• Absenţa instrucţiunii if conduce la o recursivitate infinită, la un ciclu fără condiţie
de terminare (aceasta ar duce la o eroare de program - depăşirea stivei)
• Pentru funcţiile de tip diferit de void apelul recursiv se face printr-o instrucţiune
return, prin care fiecare apel preia rezultatul apelului anterior!
• Funcţiile recursive nu conţin, în general, cicluri explicite (cu unele excepţii), iar
repetarea operațiilor este obţinută prin apelul recursiv!
void f()
{
f(); //apel infinit
}