我想分享一个我正在努力解决的问题。 我需要创建两个递归函数(使用尾递归,不允许在函数体内放入多个返回值),这些函数是: 计算两组数字之间的交点。 计算两组数字之间的对称差。
我已经完成了计算交点的功能,并将其发布在代码部分中。如何计算交点的对称差?因为对称差与交集相反,所以也许我可以重用已经为对称差函数编写的一些代码。
注意:两组数字保存在两个链接列表中,并且已经进行了排序,并且一组中的每个数字都是唯一的,不能重复。
这是相交的功能(在所有情况下都适用):
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;
}