Sunteți pe pagina 1din 3

Fişă de lucru – funcţii recursive

1. Funcţia F are definiţia alăturată. Câte valori egale cu 0 se afișează la apelul F(5)?
void F(int x)
{ cout<<x<<' '<<0<<' ';
if (x!=0)
{ cout<<0<<' ';
if (x%2==0) F(x-2);
else F(x+1);
}
}
a. 9 b. 10 c. 5 d. 6
2. Ce valoare va avea variabila globală a de tip întreg, în urma apelului f(2020), dacă înainte de
apel a=0 şi funcția f este definită alăturat?
int f(int n)
{
a++;
if (!n) return 1;
return f(n/100)+f(n/10);
}

a. 15 b. 0 c. 8 d. 2
3. Subprogramele f1, f2 și f3 sunt definite mai jos.
int f1(int n)
{ if(n==0) return 1;
return n*f1(n-1);
}
int f3(int n)
{ int f=1;
while (n!=0)
{ f=f*n; n=n-1; }
return f;
}
int f2(int n)
{
if(n>1) return n*(n-1)*f2(n-2);
return 1;
}

Pentru n=12, se obține aceeași valoare la apelul subprogramelor:


a. f1 și f2 b. f1 și f3 c. f2 și f3 d. f1, f2 și f3
4. Subprogramul f este definit alăturat. Scrieți valoarea lui f(3).
int f(int n)
{ int r, i;
r=0;
for (i=1; i<=n; i++)
r=r+i+f(n-i);
return r;
}

a. 3 b. 6 c. 9 d. 11
5. Subprogramul f este definit alăturat. Indicați de câte ori se execută subprogramul pentru
apelul f(10,20).
int f(int x, int y)
{ if (x<=1 || y<=1) return 0;
if (x>y) return 1+f(f(x-y,y),y-1);
return 1+f(x-1,f(x,y-x));
}

a. de 2 ori b. de 5 ori c. de 10 ori d. de 20 de ori


6. Se consideră vectorul a, declarat global după cum urmează:
int a[]={1,1,1,2,2,2,2,3,5,5,5,6,7,7,7,7,8,8,7,7,7};

şi funcţia f() următoare:


int f(int i)
{
if (i==1) return 0;
return (a[i-1]==a[i] && a[i]==a[i+1])+f(i-2);
}

Ce valoare va returna apelul f(19)?


7. Se consideră vectorul a cu n elemente întregi, memorate începând cu poziţia 0 (a şi n variabile
globale). Apelul f(0) trebuie să returneze numărul de valori pare din vectorul a.
Completaţi funcţia f()!
int f(int i)
{
if (i==…) return 0;
if (a[i]%2==0) return 1+…;
return …;
}

8. Se consideră funcţia următoare, definită incomplet.


Ştiind că apelul f(x,2) va returna numărul de divizori proprii ai lui x, completaţi funcţia!
int f(int x, int d)
{if (…) return 0;
if (…) return 1;
if (x%d==0) return 2+…;
return …;
}

Ştiind că apelul f(x,2) va returna numărul de divizori proprii ai lui x, completaţi funcţia!
9. Ce va afişa pe ecran următorul program?
#include <iostream>
using namespace std;
int f(int x, int y)
{if (x==y) {cout<<x<<' '; return x;}
else
if (x<y) {cout<<x<<' '<<y<<' '; return f(f(x, y-1),y-1);}
else {cout<<x<<' '<<y<<' '; return f(f(x-1, y),x-1);}
}
int main()
{
cout<<f(2,5);
return 0;
}

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