Рекурсивная функция. Рекурсивные алгоритмы
Изучаем в вузе Рекурсивные функции, к преподавателю в данный момент нет возможности подойти. Подскажите как реализовать. Определить принадлежит ли заданный элемент одномерному массиву Для решения задачи описать рекурсивную функцию. Так начал:
#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);