Рекурсивная функция. Рекурсивные алгоритмы

Изучаем в вузе Рекурсивные функции, к преподавателю в данный момент нет возможности подойти. Подскажите как реализовать. Определить принадлежит ли заданный элемент одномерному массиву Для решения задачи описать рекурсивную функцию. Так начал:

    #include <iostream>
#include <stdlib.h>
#include "math.h"

using namespace std;

int prm(int p1, int p2, int m[], int p3, int p4)
{
    for (p2 = 0; p2 <= p1; p2++)
    {
        if (m[p2] = p3)
        {
            p4 = 1;
        }
        else p4 = 2;
    }
    if (p4 = 1)
    {
        return 1;
    }
    else return 0;
}

int main()
{
    int z = prm(5, 0, { 1, 3, 4, 5, 6 }, 0, 0);
}

Ответы (2 шт):

Автор решения: Harry
bool is_in(int x, int a[], int first, int last)
{
    if (a[first] == x) return true;
    if (first == last) return false;
    return is_in(x,a,first+1,last) ;
}

...

int a[] = {1,2,3,4,5,6,7};
cout << is_in(5,a,0,6);

Так устроит?

Или еще короче - с конца:

bool is_in(int x, int a[], int n)
{
    return (n == 0) ? false : a[n-1] == x ? true : is_in(x,a,n-1);
}
...

int a[] = {1,2,3,4,5,6,7};
cout << is_in(5,a,7);

Для особо желающих писать массив прямо в вызове (а что, сразу не видно, входит или нет? :))

bool is_in(int x, initializer_list<int> a, int n = -1)
{
    if (n == -1) n = a.size();
    return (n == 0) ? false : data(a)[n-1] == x ? true : is_in(x,a,n-1);
}

....

int main(int argc, char * argv[])
{
    cout << is_in(5,{1,2,3,4,5,6,7});
}

Передавать при этом что-то еще, кроме массива и значения, не нужно.

→ Ссылка
Автор решения: ТарасПрогер

Как насчет такого варианта?

#include <iostream>
#include <math.h>
using namespace std;


bool prm(int elem, int* arr, int size)
{
    static int cnt = 0;
    static int not_match = 0;

    if (not_match > size) return false;
   
    if (elem == arr[cnt++])
        return true;
    else
        ++not_match;
        return prm(elem, arr, size);
   
}



int main()
{
    int arr[5] = { 2,3,4,5,0 };
    bool ok = prm(3, arr, 5);
    cout << std::boolalpha << ok << endl;
    system("pause");
}

std::boolalpha - для вывода true/false вместо 1/0

Желаете прямо вставить безымянный массив в функцию?

using arr = const int[5];
bool prm(int elem, arr const& array, int size)    
...
bool ok = prm(45, { 2,3,4,5,0 }, 5);
→ Ссылка