Clasa a X-a · RecursivitateRead in English

Numărul de apariții într-un vector, recursiv în C++

În engleză: Number of occurrences in an array, recursively

O(n)C++1745 de linii2 exemple

Ideea

Numărul aparițiilor lui x printre primele n elemente este numărul aparițiilor printre primele n - 1 elemente, la care se adaugă 1 dacă ultimul element v[n - 1] este egal cu x. Oprire: un vector cu 0 elemente nu conține nicio apariție. Se citesc n, cele n elemente și x.

Descrierea în engleză

The number of occurrences of x among the first n elements is the number of occurrences among the first n - 1 elements, plus 1 if the last element v[n - 1] equals x. Stop: an array with 0 elements contains no occurrences. n, the n elements and x are read.

Complexitate
O(n)
Clasa
Clasa a X-a (Grade 10)

Exemple

Exemplul 1

Intrare

7
1 3 2 3 3 5 1
3

Ieșire așteptată

3
Exemplul 2

Intrare

3
4 5 6
9

Ieșire așteptată

0

Codul C++

Codul complet, cu comentarii în română. Îl poți modifica liber și îl poți reseta oricând.

numarul-de-aparitii-recursiv.cpp
/*
 * Titlu: Numărul de apariții într-un vector, recursiv
 * Clasa: 10
 * Capitol: Recursivitate
 * Descriere: Numărul aparițiilor lui x printre primele n elemente este numărul
 *            aparițiilor printre primele n - 1 elemente, la care se adaugă 1 dacă
 *            ultimul element v[n - 1] este egal cu x. Oprire: un vector cu 0 elemente
 *            nu conține nicio apariție. Se citesc n, cele n elemente și x.
 * Complexitate: O(n)
 *
 * Exemplu
 * Intrare:
 * 7
 * 1 3 2 3 3 5 1
 * 3
 * Ieșire: 3
 *
 * Exemplu
 * Intrare:
 * 3
 * 4 5 6
 * 9
 * Ieșire: 0
 */
#include <iostream>
using namespace std;

int aparitii(int v[], int n, int x)
{
    if (n == 0)
        return 0;
    return aparitii(v, n - 1, x) + (v[n - 1] == x ? 1 : 0);
}

int main()
{
    int v[1000], n, x;
    cin >> n;
    for (int i = 0; i < n; i++)
        cin >> v[i];
    cin >> x;
    cout << aparitii(v, n, x) << '\n';
    return 0;
}

Rulează pe un g++ adevărat (C++17, -O2) prin Compiler Explorer. Programele trebuie să se termine repede: există o limită de timp.