vineri, 14 martie 2014

Teste

                                                                           Test 1

1. 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;
afis(x/3);
cout<<x+1;
}

}

2. Se consideră subprogramul f definit alăturat. Ce valoare are f(5)? Dar f(100)?
long f(int n)
{
if(n<0) return 0;
else return f(n-2)+n;
}

3. Funcţia f are definiţia alăturată. Dacă f(x) are valoarea 10100, care este valoarea lui x?

long f(int n)
{
if(n<=0) return 0;
else return f(n-1)+2*n;
}

4. Subprogramul f are definiţia alăturată. Ce valoare are f(4)? Dar f(11)?
int f(int x)
{if(x<1)return 1;
else return f(x-3)+1;
}
5. Subprogramul f are definiţia alăturată. Ce valoare are f(6,5)? Dar f(5,10)?
int f(int x,int y)
{if(x==y)return x;
else if(x<y)return f(x+1,y-1);
else return f(x-1,y);
}
6. Subprogramul f are definiţia alăturată. Ce valoare are f(3)? Dar f(10)?
int f(int x)
{if(x==0)return 0;
else return f(x-1)+2;}

7. Subprogramul f are definiţia alăturată. Ce valoare are f(7)? Dar f(100)?
int f(int x)
{if(x%6==0)return x;
else return f(x-1);
}

8. Pentru definiţia alăturată a subprogramului f, ce valoare are f(3)? Dar f(8)?
int f(int x)
{
if(x<=4) return x*x-3;
return f(x-3)+4;
}

9. Pentru definiţia alăturată a subprogramului sc, stabiliţi ce valoare are sc(10). Dar sc(901324)?
int sc(long x)
{
if(x<10) return x;
return sc(x/10)+x%10;}

                                                           

                                                                       Test 2


1. Subprogramul f este definit alăturat.
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;
}

2. Funcţia f are definiţia alăturată:
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);
}

3. Funcţia f are definiţia alăturată.
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);
}

4. Pentru subprogramul suma definit alăturat, 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);
}

5. Se consideră subprogramul, f, definit alăturat.
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);
}

6. 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;
}

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

8. 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);}


9. Subprogramul re este definit alăturat. Ce valoarea are re(1)? Dar re(14)?

int re(int i)
{
if (i<9) return 3+re(i+2);
else
if (i==9) return -2;
else return 1+re(i-1);
}



                                                                     Test 3


1. Se consideră subprogramul alăturat:

int f(int a, int b)
{if (b<1) return -1;
else
if (a%b==0)
return 1+f(a/b,b);
else
return 0; }
Ce valoare are f(15,2)? Dar f(128,2)?


 2. 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)
if(n%3>0)
{ cout<<i; f(n/3,i+1); }
}

 3. Pentru definiţia de mai jos a subprogramului f, ce se afişează ca urmare a apelului f(12345);?
void f(long n)
{ cout<<n%10;
if(n!=0)
{ f(n/100); cout<<n%10;}
}

4. Pentru definiţia alăturată a subprogramului f, ce se afişează ca urmare a apeluluif(26);?
void f (int x)
{if(x>0)
if(x%4==0)
{ cout<<’x’;
f(x-1); }
else
{ f(x/3);
cout<<’y’; }}

5. Pentru definiţia alăturată a subprogramului f, ce se afişează ca urmare a apeluluif(15,2);?
void f (int n, int x)
{ if(x>n)
cout<<0;
else
if(x%4<=1) f(n,x+1);
else
{ f(n,x+3);
cout<<1;
}
}

6. Pentru subprogramul f definit mai jos, ce se  afişează ca urmare a apeluluif(3,17)?
void f ( int a, int b)
{ if(a<=b)
{ f(a+1,b-2); cout<<’*’;}
else cout<<b;
}

 7. Se consideră subprogramul f definit alăturat. Ce se va afişa în urma apeluluif(12345);?
void f(long int n)
{ if (n!=0)
{if (n%2 == 0)
cout<<n%10;
f(n/10);
}
}

8. Se consideră subprogramul f, descris alăturat. Ce se va afişa în urma apeluluif(3);?
void f(int n)
{ if (n!=0)
{ if (n%2==0)
cout<<n<<’ ’;
f(n-1);
cout<<n<<’ ’;
}
else cout<<endl;
}

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

void f(long n)
{if (n>9)
{cout<<n/100;
f(n/10);
}

}

(RALUCA SANDU)
Un alt exemplu ar fi definirea conceptului de strămoș al unei persoane:
  • Un părinte este strămoșul copilului. ("Baza"')
  • Părinții unui strămoș sunt și ei strămoși ("Pasul de recursie").

Informatii de baza

         În matematică și informatică recursivitatea funcționează prin definirea unuia sau a mai multe cazuri de bază, foarte simple, și apoi prin definirea unor reguli prin care cazurile mai complexe se reduc la cazuri mai simple.
Un exemplu de recursivitate este în definirea formală a numerelor naturale din cadrul teoriei mulțimilor:
  • baza recursiei este faptul că 1 este număr natural;
  • în plus, orice număr natural are un succesor, care este de asemenea un număr natural.