Sunteți pe pagina 1din 3

Funcții recursive

1) Factorial

1. int fact(int n)
2. {
3. if(n == 0 ) return 1;
4. else return n*fact(n-1);
5. }

2) 𝑆1 = 2 + 4 + ⋯ + 2𝑛

1. int S1(int n)
2. {
3. if(n == 0 ) return 0;
4. else return 2*n+S1(n-1);
5. }

3) 𝑆2 = 21 + 22 + ⋯ + 220

1. int power(int x, int y) // x^y, x-baza, y-exponent


2. {
3. if(y==0) return 1;
4. else return x*power(x, y-1);
5. }
6.
7. int S2(int n)
8. {
9. if(n==0) return 1;
10. else return power(2, n) + power(2, n-1);
11. }

1 1 1
4) 𝑃1 = ∗ ∗ …∗
1+2 1+4 1+2𝑛

1. int P1(int n)
2. {
3. if(n==0) return 1;
4. else return 1.0/(1+2*n)*P1(n-1);
5. }

5) 𝑃2 = 2 ∗ 22 ∗ … ∗ 220

1. int power(int x, int y) // x^y, x-baza, y-exponent


2. {
3. if(y==0) return 1;
4. else return x*power(x, y-1);
5. }
6.
7. int P2(int n)
8. {
9. if(n==0) return 1;
10. else return power(2, n)*P2(n-1)
11. }
6) Șirul lui Fibonacci
1, 𝑑𝑎𝑐ă 𝑛 = 0 𝑠𝑎𝑢 𝑛 = 1
𝑓(𝑛) = {
𝑓(𝑛 − 1) + 𝑓(𝑛 − 2), 𝑎𝑙𝑡𝑓𝑒𝑙

1. int fib(int n)
2. {
3. if(n==0 || n==1) return 1;
4. else return fib(n-1)+fib(n-2);
5. }

7) Suma cifrelor numărului 𝑛 ∈ ℕ∗

1. int S(int n)
2. {
3. if(n==0) return 0;
4. else return n%10+S(n/10);
5. }

8) Oglinditul lui 𝑛 ∈ ℕ∗

1. int oglindit(int n,int o)


2. {
3. if(n==0) return o;
4. else return oglindit(n/10, o*10+n%10)
5. }
6.
7. int main()
8. {
9. int n;
10. cin>>n;
11. cout<<oglindit(n, 0);
12. }

9) Afișarea divizorilor lui 𝑛 ∈ ℕ∗

10) Verificarea că 𝑛 este prim

1. int prim(int n, int d)


2. {
3. if(d==1) return 1;
4. else if(n%d==0) return 0;
5. else return prim(n, d-1);
6. }
7. int main() {
8. int n; cin>>n;
9. if(prim(n,n/2)==1) cout<<"Este prim";
10. else cout<<"Nu este prim";
11. }
Vectori

1) Citirea și afișarea lui v

1. void citire(int n, int v[25])


2. {
3.
4. if (n>=1)
5. {
6. citire(n-1, v); cout<<"v["<<n<<"]="; cin>>v[n];
7. }
8. }
9.
10. void afisare(int n, int v[25])
11. {
12.
13. if(n>=1)
14. {
15. afisare(n-1,v);
16. cout<<"v["<<n<<"]="<<v[n]<<endl;
17. }
18. }

2) Afișarea elementelor pozitive din v

1. void elpoz (int n, int v[300])


2. {
3. elpoz(n-1, v);
4. if(v[n]>=0)
5. cout<<v[n]<<" ";
6.
7. }

3) Afișarea pozițiilor elementelor negative din v

1. void negativpoz (int n, int v[300])


2. {
3. if(n>=1)
4. {
5. negativpoz(n-1, v);
6. if(v[n]<0)
7. cout<<n<<" "; //pozitia n a vectorului
8. }
9. }

4) Maximul elementelor din v

1. int maxim(int n, int v[300])


2. {
3. if(n==1) return v[n];
4. else if(v[n]>maxim(n-1, v)) return v[n];
5. else return maxim(n-1, v);
6. }

5) Produsul elementelor divizibile cu 3 din v

1. int Pdiv (int n, int v[300])


2. {
3. if(n == 0) return 1;
4. else if(v[n]%3==0)
5. return v[n]*Pdiv(n-1, v);
6. else return Pdiv(n-1, v);
7. }

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