Contact și feedback

Nu obții 100 de puncte sau ai nelămuriri în privința problemelor? Scrie-mi pe Instagram.


Ai găsit o greșeală, vrei să raportezi un utilizator sau vrei să comunici altceva? Folosește formularul de contact.


Vrei să ne transmiți o părere despre platformă? Folosește formularul de feedback.

Shortcuturi

Folosește următoarele shortcuturi pentru a naviga mai ușor pe platformă.

Generale

Meniu shortcuturi?
Căutare probleme sau utilizatori/
Navigare printre rezultatele căutării↑, ↓
Meniu de contact și feedbackCTRL + Shift + F
Ieșire din meniuriEsc

Editor probleme

Setări editorCTRL + Shift + S
Schimbare stil editorCTRL + Shift + E
Șabloane de codCTRL + Shift + 1/2/3
Golire editorCTRL + Shift + 4

Suma elementelor unui vector recursiv în C++

Dându-se un șir a[] cu n elemente, să se afișeze pe ecran suma elementelor sale, folosind o funcție recursivă.

Exemplu. Pentru a = (1, 2, 10, 9, 8), pe ecran se afișează 30.

Abordarea problemei

Vom crea un subprogram care are ca parametri următorii:

  • Vectorul nostru (a);
  • Lungimea sa (n);
  • Poziția curentă pe care ne aflăm (i);

Vom simula o structură repetitivă de tip for, astfel:

  • Dacă i ≤ n, atunci:
    • returnăm elementul curent (a[i]), la care adunăm suma elementelor de după (apelând funcția pentru i + 1);
  • În caz contrar (i > n):
    • returnăm 0 și ne oprim.

Vom indexa șirul de la 1, însă rezolvarea este foarte asemănătoare și pentru indexarea de la 0.

Implementare în C++

Iată rezolvarea în C++.

#include <iostream>

using namespace std;

int sumaElementelor(int a[], int n, int i) { //Șirul, lungimea și indicele curent
    if(i > n) { //Dacă am terminat șirul, atunci ne oprim din executat
        return 0; //Similar cu break
    }
    return a[i] + sumaElementelor(a, n, i + 1); //Returnăm elementul curent + suma elementelor de după
}

int main()
{
    //Declarăm și citim șirul nostru (indexat de la 1)
    int n, a[101];
    cin >> n;
    for(int i = 1; i <= n; i++) {
        cin >> a[i];
    }

    //Afișăm suma elementelor șirului
    cout << sumaElementelor(a, n, 1);
    return 0;
}

Alte resurse sau bibliografie

Obține medalia mult dorită. Devino As la olimpiadă.

Curs complet de olimpiadă, pregătit de olimpici de la Oxford și TU Delft.

Cuprinsul lecției

Se încarcă…

Citește și

Suma divizorilor unui număr în C++Cel mai puțin semnificativ bit în C++Numărul de apariții al unui număr într-un vector în C++Aflarea sumei primelor N sume GaussVectorii în C++: citire și afișareAplicații cu ciurul lui Eratostene în C++: suma divizorilor, numărul divizorilorTransformarea unui număr din baza 10 în baza 2 în C++Complexitatea unui algoritm (timp și spațiu) în C++Verifică dacă o literă este vocală în C++Instrucțiunea while (structuri repetitive)Generarea șirului Fibonacci generalizat în C++Verifică dacă un bit de pe o anumită poziție este 1 sau 0 în C++Interschimbarea a două variabile în C++ (3 metode)Suma 1 + 2 + 3 + ... + N în C++Aria unui triunghi folosind coordonatele acestora în C++Funcții în C++. Ce sunt subprogrameleȘiruri de caractere în C++. Tot ce trebuie să știiNumărul combinărilor în C++ (formula combinărilor)Cifra de control a unui numărVerifică dacă un număr dat este o putere de 2 în C++Cel mai mare divizor comun (CMMDC) a două numere în C++Cel mai mic/mare divizor prim al numerelor de la 1 la N (Folosind ciurul lui Eratostene)Căutare binară în C++Comentarii în C++Maximul și minimul a n valori în C++Cifra maximă a unui număr recursiv în C++Al N-lea termen dintr-o progresie geometricăMatrice pătratice în C++. Diagonala principală și secundarăNumărul minim de peroane pentru o gară în C++Cel mai frecvent element dintr-un șir în C++Numărul de divizori primi ai unui număr în C++Valoarea absolută (modulul) unui număr în C++Maximul și minimul unui vector în C++Verifică dacă o literă este mică sau mare în C++Algoritm recursiv pentru căutare binară (clasa a X-a)Mediana unui șir de valori în C++Matrice în C++. Declararea și parcurgerea tablourilor bidimensionaleMatrice Fibonacci - al n-lea termen Fibonacci în timp logaritmicTipuri de date în C++: numere întregi, reale, caractere și alteleCum să citești și să afișezi în fișiere în C++Ciurul lui Eratostene în C++Indicatorul lui Euler în C++Maximul și minimul a trei valori în C++Afișarea divizorilor primi ai unui număr în C++Șirul lui Fibonacci în C++Câte numere naturale sunt într-un interval dat? (C++)Numărul de divizori al numerelor de la 1 la N (Folosind ciurul lui Eratostene)Cea mai lungă secvență de elemente crescătoare în C++Inversarea unui șir de caractere în C++Suma divizorilor numerelor de la 1 la N (Folosind ciurul lui Eratostene)Inversarea unui vector în C++Citirea și afișarea matricelor în C++Sortare crescătoare recursivă în C++ - Merge sort și Bubble sortVerificare dacă șir de caractere este palindrom în C++Numărul de cifre ale factorialului unui numărCodul ASCII (tabel complet)Materia pentru olimpiada de informatică - tot ce trebuie să știiCMMMC a două numere în C++ (cel mai mic multiplu comun)Funcții predefinite în C++ (matematice, șiruri de caractere)Copiuțe: Cifrele unui numărVerifică dacă un caracter este cifră în C++Oglinditul unui număr în C++Tutorial instalare CodeBlocks (ușor) - Introducere în informatică C++Instrucțiunea break (structuri repetitive)Oglinditul recursiv al unui număr în C++Verificarea unui an bisect în C++Rădăcina cubică a unui număr în C++ (cube root)CMMDC recursiv a două numere naturale în C++Verificare număr prim în C++ (Clasa a IX-a)Al N-lea termen Fibonacci în C++Ce este o variabilă unsigned în C++?Transformarea unei litere mari în literă mică în C++Indicatorul lui Euler al numerelor de la 1 la N (Folosind ciurul lui Eratostene)Instrucțiunea for (structuri repetitive)Ce înseamnă variabilă globală și locală în C++?Divide et Impera (metodă de programare C++)De ce cer unele probleme răspunsul modulo 666013 sau modulo 1.000.000.007?Cum să afișezi partea întreagă a unui număr real în C++Numărul aranjamentelor în C++ (formula aranjamentelor)Transformarea unei litere mici în literă mare în C++Afișarea elementelor unui vector recursiv în C++Cum să calculezi instant 2 la puterea N în C++Prima cifră a unui număr în C++Cel mai semnificativ bit în C++Factorialul unui număr în C++Verifică dacă un număr aparține șirului Fibonacci în C++Numărul de divizori al unui număr în C++Cifrele unui număr. Prelucrarea cifrelor unui număr în C++Verifică dacă trei puncte sunt coliniare C++Al N-lea termen dintr-o progresie aritmeticăCifra maximă și minimă a unui număr în C++Cel mai mic număr cu suma cifrelor N în C++Instrucțiunea continue (structuri repetitive)Suma numerelor naturale dintr-un interval dat în C++Ridicarea la putere în timp logaritmic în C++. Exponențiere rapidăInstrucțiunea do while (structuri repetitive)Ce este o funcție void în C++?Distanța dintre două puncte în C++Numărul permutărilor în C++ (formula permutărilor)Maximul și minimul a două valori în C++Vectori de frecvență (de apariții) în C++Verificare dacă un număr este palindrom în C++Instrucțiunea de decizie în C++: if, else, switch, casePointer în C++. Variabile de tipul char * (char steluță)Bordarea unei matrice în C++Transformarea unui număr din baza 2 în baza 10 în C++Aria și circumferința unui cerc în C++Combinatorică în C++: permutări, aranjamente, combinări și alteleOperații cu numere mari în C++ - Toate funcțiile explicateSuma elementelor unui vector recursiv în C++Numere triunghiulare. Verificarea unui număr triunghiularInterclasarea a doi vectori în C++Calculul combinărilor de n luate câte k (nCk) în C++Tipul struct în C++. Ce sunt structurile de date neomogeneRadicalul unui număr în C++ (rădăcina pătrată)Structuri repetitive (while, do while, for, etc)Verifică dacă un număr este par sau impar fără modulo în C++Citește un șir de caractere cu spații în C++Vectorii în C++: declarare și parcurgereAflă secolul unui an citit de la tastatură în C++Do while vs while în C++ - Care e diferența?Ce înseamnă endl în C++?Verifică dacă un caracter este literă în C++Recursivitate în C++

© Drepturi de autor

Echipa InfoAs își rezervă drepturile de autor pentru conținutul acestei pagini. Copierea conținutului fără acordul scris expres al InfoAs reprezintă o încălcare a Legii 8/1996 și va fi tratată ca atare.

Trimite lecția

Toată lecția

Doar videoclipul pe YouTube

Informatica devine ușoară cu InfoAs

Intră în cont