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<<n%10;
   if(n!=0)
   {  cout<<n%10;
      f(n/100);
   }}

```

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<<x%10;
  }}

```

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<<b;}

 6. Se consideră subprogramul cu definiţia de mai jos. Ce valoare se va afişa în urma executării instrucţiunii cout<<f(12); ?

int f (int n)

{  int c;

   if (n!=0)

   {  if (n%2==1) c=1+f(n/2);

      else c=f(n/2);

      cout<<n%2;

      return c;

   }

   else return 0;

}

```

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<<n%10;

      f(n/10);

      if (n%2!=0) cout<<n%10;

   }

   else cout<<endl;

}

```

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<<n%10;

      f(n/10);

      if (n%2==0) cout<<n%10;

   }

   else cout<<endl;

}

```

9. Se consideră subprogramul cu definiţia de mai jos. Ce valoare se va afişa în urma executării instrucţiunii cout<<f(8); ?

```
int f (int n)

{  int c;

   if (n!=0)

   {  if (n%2==0) c=1+f(n/2);

      else c=f(n/2);

      cout<<n%2;

      return c;

   }

   else return 0;

}

```

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);

}

```

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));

}

```

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);

}

```

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);

   }

}

```

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);

   }

}

```

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);

}

```

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;

}

```

19. Se consideră subprogramul f definit mai jos.

a) Ce valoare are f(100)?

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);

}

```

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);

}

```

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);

}

```

22. Funcţia f are definiţia de mai jos.

a) Ce valoarea are f(17)?

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);

}

```

23. Funcţia f are definiţia de mai jos:

a) Ce valoare are f(16)?

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);

}

```

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);

}

```

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;

   }

}

```

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;

}

```

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;

   }

}

```

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);

   }

}

```

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;

   }

}

```

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;

   }

}

```