Другие языки программирования и технологии
Сравнить 2 массива через рекурсию
Есть 2 массива, которые нужно сравнить, т.е. что все элементы одного массива существуют в другом, даже если не в том порядке. Нельзя пользоваться циклами (т.е. "for", "foreach", "while"), т.е. решение через рекурсию - это условие обязательно! Для примера: {1,2,3,4} сравнение {3,1,4,2} TRUE {1,2,3,4} сравнение {4,1,4,2} FALSE Если можно, дайте пример кода в С# или Java. Спасибо!
private static bool[] tempArr;
private static byte[] byteArrConst = new byte[] { 3, 2, 4, 1 };
static void Main(string[] args)
{
byte[] byteArr2 = new byte[] { 2, 1, 3, 4 };
byte[] byteArr3 = new byte[] { 4, 1, 3, 4 };
byte[] byteArr4 = new byte[] { 2, 1, 3, 4, 5};
byte[] byteArr5 = new byte[] { 4, 3, 2, 1 };
rec(byteArr2);
Console.WriteLine(!tempArr.Contains(false));
rec(byteArr3);
Console.WriteLine(!tempArr.Contains(false));
rec(byteArr4);
Console.WriteLine(!tempArr.Contains(false));
rec(byteArr5);
Console.WriteLine(!tempArr.Contains(false));
}
static void rec(byte[] byteArr)
{
tempArr = new bool[byteArr.Length];
if (byteArr.Count() == byteArrConst.Length)
CompareArrays(byteArr, 0, 0);
}
private static void CompareArrays(byte[] byteArr, byte i, int j)
{
if (byteArrConst == byteArr[j])
tempArr = true;
else
if (j < byteArr.Length - 1)
CompareArrays(byteArr, i, ++j);
if (i < byteArrConst.Length - 1)
CompareArrays(byteArr, ++i, 0);
}
private static byte[] byteArrConst = new byte[] { 3, 2, 4, 1 };
static void Main(string[] args)
{
byte[] byteArr2 = new byte[] { 2, 1, 3, 4 };
byte[] byteArr3 = new byte[] { 4, 1, 3, 4 };
byte[] byteArr4 = new byte[] { 2, 1, 3, 4, 5};
byte[] byteArr5 = new byte[] { 4, 3, 2, 1 };
rec(byteArr2);
Console.WriteLine(!tempArr.Contains(false));
rec(byteArr3);
Console.WriteLine(!tempArr.Contains(false));
rec(byteArr4);
Console.WriteLine(!tempArr.Contains(false));
rec(byteArr5);
Console.WriteLine(!tempArr.Contains(false));
}
static void rec(byte[] byteArr)
{
tempArr = new bool[byteArr.Length];
if (byteArr.Count() == byteArrConst.Length)
CompareArrays(byteArr, 0, 0);
}
private static void CompareArrays(byte[] byteArr, byte i, int j)
{
if (byteArrConst == byteArr[j])
tempArr = true;
else
if (j < byteArr.Length - 1)
CompareArrays(byteArr, i, ++j);
if (i < byteArrConst.Length - 1)
CompareArrays(byteArr, ++i, 0);
}
Работать с массивами и без циклов. Извращение в чистом виде.
Сергей Максимов
Это со строками. А тут массивы чисел.
Сергей Максимов
Это со строками. А тут массивы чисел.
на Си это примерно так выглядит
int fun(unsigned char *a,unsigned char *b)
{
static int i;
if(i>strlen(a))return 1;
if(a==b)
{
++i;
return fun(a,b);
}
return 0;
}
int fun(unsigned char *a,unsigned char *b)
{
static int i;
if(i>strlen(a))return 1;
if(a==b)
{
++i;
return fun(a,b);
}
return 0;
}
Да, весьма извращенно.
public static bool check(object[] a, object[] b) {
if (b.Count() == 0)
return true;
else if (a.Contains(b[0]))
return check (a, b.Skip(1).ToArray());
else return false;
}
public static bool check2(object[] a, object[] b) {
return check(a,b) && check(b,a);
}
Но это именно проверка существования элементов одного в другом, а не строгое сравнение.
public static bool check(object[] a, object[] b) {
if (b.Count() == 0)
return true;
else if (a.Contains(b[0]))
return check (a, b.Skip(1).ToArray());
else return false;
}
public static bool check2(object[] a, object[] b) {
return check(a,b) && check(b,a);
}
Но это именно проверка существования элементов одного в другом, а не строгое сравнение.
Похожие вопросы
- как сравнить элементы массива типа char?
- 2 массива. Найти масимальную подпоследовательность с помощью указателей
- Создать функцию которая находит одинаковЫе єлементы в 2 массивах та использовать их для обработки рядов матрици.
- Создать функцию которая находит одинаковЫе єлементы в 2 массивах та использовать их для обработки рядов матрици
- Как быть с многоразмерными массивами? Рекурсия?
- Напишите программу для расчета среднего арифметического всех элементов числового массива рекурсией
- Стоит ли использовать рекурсию в целом? (+)
- Рекурсия, возникли проблемы с изучением рекурсии, не могли бы подсказать книги или видео про обьяснение рекурсии
- Ошибка в программе delphi. Рекурсия
- Вопрос тем, кто хорошо знаком с рекурсией. Язык Си (но это второстепенно)...