Exercitii recursivitate

1. Pentru definiţia de mai jos a subprogramului f, ce se afişează ca urmare a apelului f(121,1); ? void f(long n, int i){ if(n==0) cout<0) f(n/3,i+1);} 2. Pentru definiţia de mai jos a subprogramului f, ce se afişează ca urmare a apelului f(125); ? void f(int n){   cout<3. Pentru definiţia de mai jos a subprogramului f, ce se afişează ca urmare a apelului f(26);?  void f (int x){   if(x>0)    {  cout<<'x';       f(x/3);       cout<<'y';    }} 4. Pentru subprogramul f definit mai jos, ce se afişează ca urmare a apelului f(15,2); ?  void f (int n, int x){ if(x>n) cout<<'*';    else    {  f(n,x+4);       cout<5. Pentru definiţia de mai jos a subprogramului f, ce se afişează ca urmare a apelului f(10); ? void f (int b) { if(3<=b) {  f(b-2); cout<<'*'; }   else cout<7. Se consideră subprogramul cu definiţia de mai jos. Ce se va afişa în urma apelului f(12345);? void f(long n) { if (n!=0) { if (n%2==0) cout<

8. Se consideră subprogramul f cu definiţia de mai jos. Ce se va afişa în urma apelului f(12345);? void f(long n) { if (n!=0) { if (n%2!=0) cout<

9. Se consideră subprogramul cu definiţia de mai jos. Ce valoare se va afişa în urma executării instrucţiunii cout<10. Se consideră subprogramul cu definiţia de mai jos. Ce valoare are f(3,1)? int f(int n,int y) { if(n!=0) { y=y+1; return y+f(n-1,y); }   else return 0; } 

11. Pentru funcţia f, definită mai jos, care este valoarea f(1711)? Dar f(23169)? int f(int n) { if (n==0) return 0; else if (n%2==0) return n%10+f(n/10); else return f(n/10); } 

12. Pentru funcţiile f1 şi f2 definite mai jos, stabiliţi care este valoarea lui f1(3). Dar f2(41382)? long f1(int c) { if (c%2==1) return 1; else return 2; } long f2(long n) { if (n==0) return 0; else return f1(n%10)+f2(n/10); } 

<p class="MsoNormalCxSpMiddle" style="margin:0mm;margin-bottom:.0001pt; mso-add-space:auto">13. Pentru funcţiile f şi g definite mai jos, scrieţi care este rezultatul returnat la apelul g(11). Dar rezultatul returnat la apelul f(6)? long g(long x) { if (x>9) return (x/10 + x%10); else return x; } long f(int c) { if (c<1) return 1; else return g(c+f(c-1)); } <p class="MsoNormalCxSpMiddle" style="margin:0mm;margin-bottom:.0001pt; mso-add-space:auto">14. Funcţia F are definiţia de mai jos. Ce valoare are F(3)? int F(int n) { if(n==0 || n==1) return 1; else return 2*F(n-1)+2*F(n-2); } <p class="MsoNormalCxSpMiddle" style="margin:0mm;margin-bottom:.0001pt; mso-add-space:auto">15. Subprogramul f are definiţia de mai jos. Ce se va afişa în urma apelului f(12345);? void f(long n) { if (n>9) { cout<<n/100; f(n/10); } } <p class="MsoNormalCxSpMiddle" style="margin:0mm;margin-bottom:.0001pt; mso-add-space:auto">16. Funcţia f are definiţia de mai jos. Ce se va afişa în urma apelului f(12345,0);? void f(long n, int i) { if (i<n%10) { cout<<n%10; f(n/10,i+1); } } <p class="MsoNormalCxSpMiddle" style="margin:0mm;margin-bottom:.0001pt; mso-add-space:auto">

<p class="MsoNormalCxSpMiddle" style="margin:0mm;margin-bottom:.0001pt; mso-add-space:auto">17. Funcţia F are definiţia de mai jos. Ce valoare are F(18)? int F(int x) { if (x<=1) return x;    else return x+F(x-2); } <p class="MsoNormalCxSpMiddle" style="margin:0mm;margin-bottom:.0001pt; mso-add-space:auto">

<p class="MsoNormalCxSpMiddle" style="margin:0mm;margin-bottom:.0001pt; mso-add-space:auto">18. Funcţia F are definiţia de mai jos. Ce valoare are F(5)? int F(int x) { if(x!=0) return x+F(x-1); else return x; } <p class="MsoNormalCxSpMiddle" style="margin:0mm;margin-bottom:.0001pt; mso-add-space:auto">19. Se consideră subprogramul f definit mai jos.

<p class="MsoNormalCxSpMiddle" style="margin:0mm;margin-bottom:.0001pt; mso-add-space:auto">a) Ce valoare are f(100)?

<p class="MsoNormalCxSpMiddle" style="margin:0mm;margin-bottom:.0001pt; mso-add-space:auto">b) Scrieţi o valoare pentru x astfel încât f(x)=1. int f(int n) {  if(n==0) return 0;    else return n%2+f(n/2); } <p class="MsoNormalCxSpMiddle" style="margin:0mm;margin-bottom:.0001pt; mso-add-space:auto">

<p class="MsoNormalCxSpMiddle" style="margin:0mm;margin-bottom:.0001pt; mso-add-space:auto">20. Considerăm subprogramul recursiv definit mai jos. Ce se va afişa în urma apelului f('C');? void f(char c) { if (c>'A') f(c-1); cout<<c; if (c>'A') f(c-1); } <p class="MsoNormalCxSpMiddle" style="margin:0mm;margin-bottom:.0001pt; mso-add-space:auto">

<p class="MsoNormalCxSpMiddle" style="margin:0mm;margin-bottom:.0001pt; mso-add-space:auto">21. Pentru subprogramul suma definit mai jos, scrieţi valoarea expresiei suma(5,4). int suma (int a, int b) { if (a==0 && b==0) return 0; else if (a==0) return 1+suma(a,b-1); else return 1+suma(a-1,b); } <p class="MsoNormalCxSpMiddle" style="margin:0mm;margin-bottom:.0001pt; mso-add-space:auto">

<p class="MsoNormalCxSpMiddle" style="margin:0mm;margin-bottom:.0001pt; mso-add-space:auto">22. Funcţia f are definiţia de mai jos.

<p class="MsoNormalCxSpMiddle" style="margin:0mm;margin-bottom:.0001pt; mso-add-space:auto">a) Ce valoarea are f(17)?

<p class="MsoNormalCxSpMiddle" style="margin:0mm;margin-bottom:.0001pt; mso-add-space:auto">b) Ce valoare are f(22)? int f(int n) {  if (n<=9) return 0;    if (n%4==0) return 0;    return 1+f(n-3); } <p class="MsoNormalCxSpMiddle" style="margin:0mm;margin-bottom:.0001pt; mso-add-space:auto">

<p class="MsoNormalCxSpMiddle" style="margin:0mm;margin-bottom:.0001pt; mso-add-space:auto">23. Funcţia f are definiţia de mai jos:

<p class="MsoNormalCxSpMiddle" style="margin:0mm;margin-bottom:.0001pt; mso-add-space:auto">a) Ce valoare are f(16)?

<p class="MsoNormalCxSpMiddle" style="margin:0mm;margin-bottom:.0001pt; mso-add-space:auto">b) Scrieţi cea mai mare valoare de două cifre pe care o poate avea n astfel încât f(n) să fie egal cu 2. int f(int n) {  if (n<=0) return -1;    if (n%2==0) return 0;    if (n%3==0) return 0;    return 1+f(n-10); } <p class="MsoNormalCxSpMiddle" style="margin:0mm;margin-bottom:.0001pt; mso-add-space:auto">24. Subprogramul afis este definit mai jos. Ce se afişează ca urmare a apelului afis(8); ?  void afis (int n) {  cout<<n;     for (int i=n/2; i>=1; i--)       if(n%i==0) afis(i); } <p class="MsoNormalCxSpMiddle" style="margin:0mm;margin-bottom:.0001pt; mso-add-space:auto">

<p class="MsoNormalCxSpMiddle" style="margin:0mm;margin-bottom:.0001pt; mso-add-space:auto">25. Subprogramul scrie este definit mai jos. Ce se afişează ca urmare a apelului scrie(2,6); ? void scrie (int x, int y) { cout<<x<<y; if(x<y) { scrie(x+1,y-1); cout<<(x+y)/2; } } <p class="MsoNormalCxSpMiddle" style="margin:0mm;margin-bottom:.0001pt; mso-add-space:auto">

<p class="MsoNormalCxSpMiddle" style="margin:0mm;margin-bottom:.0001pt; mso-add-space:auto">26. Subprogramul f este definit mai jos. Ce valoare are f(8,4)? int f (int x,int y) { if(x<y) return 1+f(x+1,y); if(y<x) return 1+f(y+1,x); return 1; } <p class="MsoNormalCxSpMiddle" style="margin:0mm;margin-bottom:.0001pt; mso-add-space:auto">

<p class="MsoNormalCxSpMiddle" style="margin:0mm;margin-bottom:.0001pt; mso-add-space:auto">27. Ce se afişează ca urmare a apelului p(123); dacă subprogramul p are definiţia de mai jos? void p (int x) { cout<<x; if(x!=0) { p(x/10); cout<<x%10; } } <p class="MsoNormalCxSpMiddle" style="margin:0mm;margin-bottom:.0001pt; mso-add-space:auto">

<p class="MsoNormalCxSpMiddle" style="margin:0mm;margin-bottom:.0001pt; mso-add-space:auto">28. Subprogramul f este definit mai jos. Ce se afişează ca urmare a apelului f(1,3); ? void f (int x, int y) { int i;    for(i=x; i<=y; i++) { cout<<i; f(i+1,y); } } <p class="MsoNormalCxSpMiddle" style="margin:0mm;margin-bottom:.0001pt; mso-add-space:auto">

<p class="MsoNormalCxSpMiddle" style="margin:0mm;margin-bottom:.0001pt; mso-add-space:auto">29. Se consideră subprogramul recursiv f1 definit mai jos. Ce se va afişa în urma apelului f1(5); ? void f1(int x) { if (x<=9) { cout<<x+1; f1(x+2); cout<<x+3; } } <p class="MsoNormalCxSpMiddle" style="margin:0mm;margin-bottom:.0001pt; mso-add-space:auto">

<p class="MsoNormalCxSpMiddle" style="margin:0mm;margin-bottom:.0001pt; mso-add-space:auto">30. Subprogramul afis este definit mai jos. Ce se va afişa în urma apelului afis(17); ? void afis(int x) { if (x>3) { cout<<x-1; afis(x/3); cout<<x+1; } }