100% au considerat acest document util (2 voturi)
2K vizualizări4 pagini

Probleme Recursivitate Rezolvate

Documentul prezintă definiții ale unor subprograme și probleme care cer determinarea valorilor întoarse de acestea sau afișate ca urmare a unor apeluri. Sunt prezentate subprograme recursive și iterative care realizează operații pe numere naturale ca diviziune, rest, extragere cifre etc.

Încărcat de

Diriczi Zsolt
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca ODT, PDF, TXT sau citiți online pe Scribd
100% au considerat acest document util (2 voturi)
2K vizualizări4 pagini

Probleme Recursivitate Rezolvate

Documentul prezintă definiții ale unor subprograme și probleme care cer determinarea valorilor întoarse de acestea sau afișate ca urmare a unor apeluri. Sunt prezentate subprograme recursive și iterative care realizează operații pe numere naturale ca diviziune, rest, extragere cifre etc.

Încărcat de

Diriczi Zsolt
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca ODT, PDF, TXT sau citiți online pe Scribd
Sunteți pe pagina 1/ 4

1.

Pentru definiţia de mai jos a


subprogramului f, ce se afişează ca urmare 6. Se consideră subprogramul alăturat:
a apelului Ce valoare are f(128,2)?
f(121,1);? int f(int a, int b){
void f(long n, int i) if (b<1) return ­1;
{ if(n!=0) else
if(n%3>0) if (a%b==0)
{ cout<<i; f(n/3,i+1); }} return 1+f(a/b,b);
Rezultat 12345 else
2. Pentru definiţia de mai jos a return 0; }
subprogramului f, ce se afişează ca urmare Rezultat 7
a apelului 7. Se consideră subprogramul f definit
f(12345);? alăturat. Ce se va afişa în urmaapelului
void f(long n) f(12345);?
{ cout<<n%10; void f(long int n)
if(n!=0) { if (n!=0)
{ f(n/100); cout<<n%10;}} {if (n%2 == 0)
Rezultat 5310135 cout<<n%10; 
3. Pentru definiţia alăturată a f(n/10);}}
subprogramului f, ce se afişează ca Rezultat 42
urmare a apelului f(26);? 8. Se consideră subprogramul f, descris
void f (int x) alăturat. Ce se va afişa în urma apelului
{ f(3);?
if(x>0) void f(int n)
if(x%4==0) { if (n!=0)
{ cout<<’x’; { if (n%2==0)
f(x­1); } cout<<n<<’ ’; 
else f(n­1);
{ f(x/3); cout<<n<<’ ’; }
cout<<’y’; }} else cout<<endl;}
Rezultat xyyy Rezultat 2
4. Pentru definiţia alăturată a          1 2 3
subprogramului f, ce se afişează ca urmare 9. Se consideră subprogramul f cu definiţia
a apelului alăturată. Ce valoare are f(1213111,1)?
f(15,2);? int f (long int n, int k){
void f (int n, int x) if (n!=0)
{ if(x>n) if(n%10==k)
cout<<0;  return 1+f(n/10,k);
else else return 0;
if(x%4<=1) f(n,x+1); else return 0;}
else Rezultat 3
{ f(n,x+3); 10. Se consideră subprogramul cu definiţia
cout<<1;}} alăturată. Ce valoare are f(3,1)?
Rezultat 01111
5. Pentru subprogramul f definit mai jos, int f(int n,int y)
ce se afişează ca urmare a apelului { if(n!=0)
f(3,17)? { y=y+1;
void f ( int a, int b) return y+f(n­1,y);}
{ if(a<=b) else return 0;}
{ f(a+1,b­2); cout<<’*’;} else  Rezultat 9
cout<<b;} 11. Care este valoarea expresiei f(23159)
7***** pentru funcţia f, cu definiţia alăturată?
int f(int n){
int c;
if (n==0) return 9;
else int F(int x){
{c=f(n/10); if (x<=1) return x;
if (n%10<c) return n%10; else
else return c;}} return x+F(x­2);} 
Rezultat 1
Rezultat 90
12. Pentru funcţiile f1 şi f2 definite
18. Funcţia F are definiţia alăturată. Ce
alăturat, stabiliţi care este valoarea lui
valoare are F(5)?
f2(41382)?
int F(int x)
long f1(int c)
{ if (c%2==1) return 1; {if(x!=0) return x+F(x­1);
else return 2;} else
long f2(long n) return x;}
{ if (n==0) return 0; Rezultat 15
else return f1(n%10)+f2(n/10);} 19. Se consideră subprogramul, f, definit
Rezultat 8 alăturat. Ce valoare are f(100)?
int f(int n)
13. Pentru funcţiile f şi g definite mai jos, { if(n==0) return 0;
stabiliţi care este rezultatul returnat la apelul else return n%2+f(n/2);}
f(6)? Rezultat 3
long g(long x) 20. Considerăm subprogramul recursiv
{ if (x>9)
definit alăturat. Ce se va afişa în urma
return (x/10 + x%10); apelului: f(’C’) 
else void f(char c)
return x { if (c>’A’) f(c­1);
}
cout<<c; 
long f(int c)
{ if (c<1)
if (c>’A’) f(c­1);}
return 1; Rezultat ABACABA
else 21. Pentru subprogramul suma definit
return g(c+f(c­1)); alăturat, scrieţi valoarea expresiei
} suma(5,4).
Rezultat 4 int suma (int a,int b)
14. Funcţia F are definiţia alăturată. Ce { if (a==0 && b==0) return 0;
valoareare F(3)? else if (a==0) return 1+suma(a,b­
int F(int n) 1);
{if(n==0 || n==1) return 1; else return 1+suma(a­1,b);
else }
return 2*F(n­1)+2*F(n­2);} Rezultat 9
Rezultat 10 22. Funcţia f are definiţia alăturată.
15. Subprogramul f are definiţia alăturată. a) Ce valoarea are f(17)? (3p.)
Ce se va afişa în urmaapelului f(12345)? b) Ce valoare are f(22)?
void f(long n) int f(int n)
{if (n>9) {if (n<=9) return 0;
{cout<<n/100; if (n%4==0) return 0;
f(n/10); return 1+f(n­3);
}} }
Rezultat 1231210 Rezultat a)3 b)2
16. Funcţia f are definiţia alăturată. Ce se va 23. Funcţia f are definiţia alăturată:
afişa în urma apelului f(12345,0);? a) Ce valoare are f(16)?
void f(long n, int i) b) Scrieţi cea mai mare valoare de două cifre
{if (i<n%10) pe care o poate avea n astfel încât f(n) să
{cout<<n%10;  fie egal cu 2.
f(n/10,i+1); int f(int n)
}} { if (n<=0) return ­1;
Rezultat 543 if (n%2==0) return 0;
17. Funcţia F are definiţia alăturată. Ce if (n%3==0) return 0;
valoare are F(18)? return 1+f(n­10);}
Rezultat a)0 b)95 30. Subprogramul afis este definit
alăturat. Ce se va afişa în urma apelului
afis(17)?
void afis(int x)
{ if (x>3)
{ cout<<x­1; 
24. Subprogramul afis este definit afis(x/3);
alăturat. Ce se afişează ca urmare a apelului cout<<x+1; }}
afis(8); Rezultat 16 4 6 18
void afis (int n) 31. Subprogramul re este definit alăturat.
{ cout<<n; Ce valoarea are re(1)? Dar re(14)?
for (int i=n/2;i>=1;i­­) int re(int i)
if(n%i==0)afis(i);} {
Rezultatul e 84211211 if (i<9) return 3+re(i+2);
25. Subprogramul scrie este definit else
alăturat. Ce se afişează ca urmare a apelului if (i==9) return ­2;
scrie(1,7); else return 1+re(i­1);}
void scrie (int x,int y) Rezultat pt re(1) e 10
{cout<<x<<y; | Rezultat pt re(14) e 3
if(x<y)
{scrie(x+1,y­1); 32. Se consideră definit subprogramul f .
cout<<(x+y)/2;}} Scrieţi două valori naturale, x1 şi x2,
Rezultat 17263544444 (x1<12 şi x2<12) pentru care
26. Subprogramul f este definit alăturat. Ce f(x1)=f(x2).
valoarea are f(8,4)? int f(int i)
int f (int x,int y) {
{ if(x<y)return 1+f(x+1,y); if (i>12) return 1;
if(y<x)return 1+f(y+1,x); else return 1+f(i+2);}
return 1; } Rezultat 5
Rezultat 5 33. Subprogramul scif returnează suma
27. Ce se afişează ca urmare a apelului cifrelor unui număr natural transmis ca
p(123); dacă subprogramul p are definiţia parametru.
alăturată. Care este valoarea expresiei
void p (int x) scif(scif(518)+scif(518))?
{cout<<x; Rezultat 10
if(x!=0){p(x/10); 34. Considerăm subprogramul f definit
cout<<x%10; } alăturat. Ce valoare are f(11,7)?
Rezultat 123 12 1 1 2 3 int f(int x,int y)
28. Subprogramul f este definit alăturat. Ce {if(x<=y) return x­y;
se afişează ca urmare a apelului return f(y­x,x­1)+3;}
f(1,4); Rezultat ­11
void f (int x,int y) 35. Pentru definiţia alăturată a
{ for (int i=x;i<=y;i++) subprogramului sc, stabiliţi ce valoare are
{cout<<i;f(i+1,y);}} sc(901324)?
Rezultat 123443442344344 int sc(long x)
29. Se consideră subprogramul recursiv f1  {if(x<10) return x;
definit alăturat. Ce se va afişa în urma  return sc(x/10)+x%10;}
apelului f1(5)? Rezultat 19
void f1(int x) 36. Pentru definiţia alăturată a
{ if (x<=9) subprogramului f, ce valoare are f(8)?
{ cout<<x+1;  int f(int x)
f1(x+2); {if(x<=4) return x*x­3;
cout<<x+3; }} return f(x­3)+4;}
Rezultat 6 8 10 12 10 8 Rezultat 9
37. Pentru definiţia alăturată a
subprogramului f, stabiliţi ce valoare are
f(23461)?
int f(int x)
{if(x<10){if(x%2!=0)return 0;
return x;}
if((x%2!=0)
return f(x/10);
return f(x/10)+x%10; }
Rezultat 12

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