Я хотел бы поделиться проблемой, с которой я борюсь.Мне нужно создать две рекурсивные функции (с хвостовой рекурсией, мне не разрешено помещать несколько возвращений внутри тела функции), и функции: Рассчитать пересечение между двумя наборами чисел.Вычислите симметричную разницу между двумя наборами чисел.
Я уже выполнил функцию, которая вычисляет пересечение, и я опубликую ее в разделе кода.Как я могу вычислить симметричную разницу в способе, которым я вычислил пересечение?Поскольку симметричная разность является противоположностью пересечения, и, возможно, я могу повторно использовать некоторый код, который я уже написал для функции симметричной разности.
Примечание: два набора чисел сохраняются в двух связанных списках, и ониуже отсортированы, и каждое число в наборе уникально, они не могут повторяться.
Вот функция пересечения (она хорошо работает во всех случаях):
t_nodo *intersezione_insieme(t_nodo *insieme_A, t_nodo* insieme_B)
{
t_nodo *tmp;
if (insieme_A == NULL || insieme_B == NULL) {
tmp = NULL;
}
else
{
while (insieme_A->info < insieme_B->info && insieme_A->succ != NULL) {
insieme_A = insieme_A->succ;
}
while (insieme_A->info > insieme_B->info && insieme_B->succ != NULL) {
insieme_B = insieme_B->succ;
}
tmp = (t_nodo*)malloc(sizeof(t_nodo));
if (insieme_A->info == insieme_B->info) {
tmp->info = insieme_A->info;
tmp->succ = intersezione_insieme(insieme_A->succ, insieme_B->succ);
}
else
{
tmp = intersezione_insieme(insieme_A->succ, insieme_B->succ);
}
}
return tmp;
}