Probleme recursivitate (v. bac)


1)Funcţia F are definiţia alăturată. 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);}
a. 1 b. 12 c. 6 d. 10

Program:

#include < iostream.h >
 int n;
 int F(int n)
{if(n == 0 || n == 1) return 1;
    else return 2*F(n-1)+2*F(n-2);

}

int main()
{cout << "n=";
 cin >> n;
cout << F(n);
}


Raspuns:d. 10

Argumentare:Se verifica daca un nr n este egal cu 0 sau 1, daca da,
se returneaza 1 altfel se rezolva operatiile 2*F(n-1)+2*F(n-2).
In cazul de mai sus 3 este mai mare decat 1 asa ca s-a trecut direct la operatii.
 


2)Subprogramul f are definiţia
alăturată. Ce se va afişa în urma
apelului f(12345);?

 void f(long n)
 {if (n > 9)
 {cout << n/100;
 f(n/10);
 }
 }
a. 1231210 b. 123121 c. 1234123121 d. 123


Program:

#include < iostream.h >
long n;
void f(long n)
{if (n > 9)
{cout <<  n/100;
f(n/10);
}
}

int main()
{cout << "n=";
 cin >>  n;
f(n);
}


Raspuns corect: a. 1231210

Argumentare:Cat timp numarul n este mai mare decat 9 se vor afisa
cifrele numarului de la capat pana la penultimul,dupa care se va relua
functia ,numarului tainduse ultima cifra.
 


3)Funcţia f are definiţia alăturată. 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);
 }
 }
a. 54321 b. 543 c. 54 d. 5432


Program:

#include < iostream.h >
long n,i;
void f(long n, int i)
{if (i <  n%10)
{cout << n%10;
f(n/10,i+1);
}
}
int main()
{cout << "n=";
 cin >> n;
 cout << "i=";
 cin >> i;
f(n,i);
}

Raspuns:b. 534

Argumentare:Se dau un nr si un contor.Contorul este 0.Cat timp contorul este
mai mic decat restul impartirii numarului la 10 se va afisa restul numarului
dupa care i creste cu 1,iar numarului i se scade ultima cifra.

 

4)Funcţia F are definiţia alăturată. Ce valoare
are F(18)?

 int F(int x)
{
 if (x < =1) return x;
 else return x+F(x-2);
}
a. 90 b. 171 c. 91 d. 18

Program:

#include < iostream.h >
int x;
int F(int x)
{ if (x <  =1) return x;
  else return x+F(x-2);
}

int main()
{cout << "x=";
 cin >> x;
 cout << F(x);}


Raspuns: a. 90

Argumentare:
F(18)=F(16)+18
F(16)=F(14)+16
F(14)=F(12)+14
F(12)=F(10)+12
F(10)=F(8)+10
F(8)=F(6)+8
F(6)=F(4)+6
F(4)=F(2)+4
F(2)=F(0)+2
F(0)=0
 


5)Funcţia F are definiţia alăturată. Ce valoare
are F(5)?

 int F(int x)
 {if(x != 0) return x+F(x-1);
 else
 return x;
 }
a. 5 b. 10 c. 15 d. 6


Rezolvare:
#include < iostream.h > 
int x;
int F(int x)
{if(x != 0) return x+F(x-1);
else
return x;
}

int main()
{cout << "x=";
 cin >> x;
cout << F(x);
}


Raspuns: c. 15

Argumentare:
F(5)=F(4)+5
F(4)=F(3)+4
F(3)=F(2)+3
F(2)=F(1)+2
F(1)=F(0)+1
F(0)=0