如何从此函数中删除多个收益

时间:2019-05-14 13:17:40

标签: c list recursion return ansi

我已经编写了一个函数来计算两个排序的链表的交集(以递归的方式),但是我需要删除if语句中的那些“返回”,并在没有它们的情况下重新适应代码。有什么建议么?预先感谢

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 if (insieme_A->info < insieme_B->info) {
            return intersezione_insieme(insieme_A->succ, insieme_B);
    }
    else if (insieme_A->info > insieme_B->info) {
            return intersezione_insieme(insieme_A, insieme_B->succ);
    }
    else 
    {
        tmp = (t_nodo*)malloc(sizeof(t_nodo));
        tmp->info = insieme_A->info;
        tmp->succ = intersezione_insieme(insieme_A->succ, insieme_B->succ);
    }
    return tmp; 
}

1 个答案:

答案 0 :(得分:1)

就像注释中概述的那样,一个函数中有多个返回不一定是错误的形式。这完全取决于上下文。例如,长期执行的函数可能会在执行该函数的代码之前检查一些“立即返回”条件。

但是我可以看到,通过在函数中使用单个return语句,可读性将得到提高。

这是我的卑鄙建议:

t_nodo *intersezione_insieme(t_nodo *insieme_A, t_nodo* insieme_B)
{ 
    t_nodo *temporaneoNodo;
    if (insieme_A == NULL || insieme_B == NULL) {
        temporaneoNodo = NULL; 
    }
    else if (insieme_A->info < insieme_B->info) {
            temporaneoNodo = intersezione_insieme(insieme_A->succ, insieme_B);
    }
    else if (insieme_A->info > insieme_B->info) {
            temporaneoNodo = intersezione_insieme(insieme_A, insieme_B->succ);
    }
    else 
    {
        temporaneoNodo = (t_nodo*)malloc(sizeof(t_nodo));
        temporaneoNodo->info = insieme_A->info;
        temporaneoNodo->succ = intersezione_insieme(insieme_A->succ, insieme_B->succ);
    }
    return temporaneoNodo; 
}