Teste de informatică pentru liceu, articole C#, C/C++, PHP
1. (2 puncte) Scrie o funcţie recursivă care returnează oglinditul unui număr natural de maximum 9 cifre. De exemplu, pentru n = 123, funcţia va returna 321.
2. (1 punct) Fie următoarea funcţie recursivă:
float F(float x, int n)
{
if (n<=2) return 2.0;
else return 2*x + F(x-1,n-1);
}
Dacă se execută următoarea secvenţă de instrucţiuni:
cout<<F(3.0, 2)<<” ”; cout<<F(3.0, 2)<<” ”; cout<<F(3.0, 2)<<” ”;
ce se va afişa :
a) 6 2 2
b) 2 8 8
c) 2 5 5
d) 1 7 7
3. (1 punct) Se consideră funcţia recursivă :
int F(int x)
{
if (x==0) return 0;
else if (x%3 == 0) return F(x/10)+1;
else return F(x/10);
}
Pentru ce valoare a lui x funcţia F va returna valoarea 4 :
a) 13369 b) 21369 c) 4 d) 1233
4) (1 punct) Fie funcţia:
void S(int i, int j)
{
if (i<=4)
if (j<=i) {cout<<”8”; S(i, j+1);}
else {cout<<”\n”; S(i+1,1);}
}
Câte caractere vor fi afişate la apelul S(1,1) ?
a) 4 b) 16 c) 10 d) 8
5) (1 punct) Fie funcţia:
void S(int x, int b)
{
if (x<b) cout<<x;
else { S(x/b,b) ; cout<<x%b; }
}
Ce se afişează în urma apelului S(305,4) ?
a) 10301 b) 103001 c) 131 d) 1220
6) (2 puncte) Scrie o funcţie recursivă optimă care calculează C(n,k) (combinări de n luate câte k). Se vor preciza mai întâi relaţiile de recurenţă.
7) (1 punct) Fie funcţia:
int an(int n)
{ if (n = = 0) return 1;
else return 3*an(n-1) + 7
}
Dacă funcţia este apelată prin an(4), de câte ori se autoapelează?
a) 4 ori b) 3 ori c) 5 ori d) o infinitate de ori e) stiva se va umple de prea multe apeluri.
Dan Pracsiu deţinător www.dponline.ro
Profesor, Liceul Teoretic "Emil Racoviță" Vaslui
Membru în Comisia Naţională a Olimpiadelor de Informatică
Pasiuni: istoria, călătoriile, fotografia, muzica clasică