Sunteți pe pagina 1din 2

PCLP I Laboratorul 10

Asist. drd. ing. Ana – Maria SUDUC

2.20 Următorul program implementează o funcţie recursivă care efectuează


calculul matematic al lui n factorial. Vom porni de la o definiţie recursivă a lui n !.
Aceasta este :

1, n=0
n ! = fact(n) =
n * fact(n-1), altfel n € N

De exemplu, pentru a calcula 3!, procedăm astfel :


3 ! = fact(3) = 3*fact(2) = 3*2*fact(1) = 3*2*1*fact(0) = 3*2*1*0*1 = 6

Funcţia recursivă fact nu face altceva decât să transcrie definiţia recursivă:

#include <iostream>
using namespace srd;

int fact (int n) //definiţia funcţiei factorial


{
if (n!) return 1;
else return n*fact(n-1); // se apelează recursivitatea
}

void main()
{
int n;
cout<<”n=”; cin>>n;
cout<<fact(n) ; // se apelează funcţia recursivă
system("pause") ;
}

Se observa ca funcţia fact se autoapelează. Autoapelul se realizează prin :


return n*fact(n-1).

2.21 Următorul program implementează o funcţie recursivă care efectuează


calculul elementelor şirul lui Fibonacci. Şirul lui Fibonacci se consideră şirul
definit astfel:

0, n=0

Un = 1, n=1

Un-1 + Un-2 , altfel

Se citeste n, numar natural. Sa se calculeze Un.


Funcţia fib transcrie definiţia recursivă:

8
PCLP I Laboratorul 10
Asist. drd. ing. Ana – Maria SUDUC

#include<iostream>
int n; // variabilă globală

int fib (int n) // definiţia funcţiei recursive


{
if (!n) return 0;
else if (n==1) return 1;
else return fib(n-1)+fib(n-2);
}

void main()
{
cout<<”n=”; cin>>n;
cout>>fib(n);
system("pause") ;
}

2.22 Scrieţi o funcţie recursivă care să calculeze cel mai mare divizor comun
pentru două numere naturale a şi b. Folosim definiţia recursivă a c.m.m.d.c. :

a, a=b

cmmdc(a,b) = cmmdc(a – b,b), a > b

cmmdc(a, b – a), a < b

Aceasta definiţie este transcrisă în funcţia recursivă cmmdc.

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

  • Lab 6
    Lab 6
    Document5 pagini
    Lab 6
    Ionut Valentin
    Încă nu există evaluări
  • Dosar Ingrijire 2022
    Dosar Ingrijire 2022
    Document13 pagini
    Dosar Ingrijire 2022
    Ionut Valentin
    Încă nu există evaluări
  • Lab 10
    Lab 10
    Document7 pagini
    Lab 10
    Ionut Valentin
    Încă nu există evaluări
  • Lab 11
    Lab 11
    Document3 pagini
    Lab 11
    Ionut Valentin
    Încă nu există evaluări
  • Lab 7
    Lab 7
    Document4 pagini
    Lab 7
    Ionut Valentin
    Încă nu există evaluări
  • Dumi
    Dumi
    Document53 pagini
    Dumi
    Ionut Valentin
    Încă nu există evaluări
  • Proiect Abb
    Proiect Abb
    Document78 pagini
    Proiect Abb
    Ionut Valentin
    Încă nu există evaluări
  • Proiect Otilia 1
    Proiect Otilia 1
    Document15 pagini
    Proiect Otilia 1
    Ionut Valentin
    Încă nu există evaluări
  • Proiect Otilia 1
    Proiect Otilia 1
    Document15 pagini
    Proiect Otilia 1
    Ionut Valentin
    Încă nu există evaluări