递归计算在不使用静态局部变量,全局变量或静态函数的情况下,在递归函数中发生的环数

Recursively count the number of loops that occur in a recursive function without using a static local variable, global variable, or static function?

本文关键字:情况下 递归函数 静态 局部变量 递归计算 全局变量 静态函数      更新时间:2023-10-16

在我的递归考试中,我必须编写递归函数,该递归函数通过链接列表,并删除所有不包含某些数据的节点,并计算C 中删除的节点的数量。我不允许使用静态函数,静态局部变量或全局变量。我该怎么做呢?

特别是使用的函数是: int remove_except(node *& head,node *& tail),并且在线性链接列表中使用。如果不使用上面列出的三种方法之一,我找不到任何方法来计算被删除的节点的数量。

由于您无法使用变量或参数,因此仅留下一个选项 - 使用函数的返回值

对于递归函数的每个调用,请执行以下操作:

  • 如果输入节点在列表的末尾,请返回0。

  • 否则,如果删除输入节点,请返回1 下一个调用的返回值(使用下一个节点作为输入)。

  • 否则,返回下一个调用as-is的返回值(使用下一个节点作为输入)。

所有调用都完成后,1S将加起来,因为控件会返回呼叫堆栈到原始呼叫者。

例如:

int remove_except(node * & head, node * & tail)
{
    if (!head) return 0;
    node *next = head->next;
    if (... /* head is to be removed */)
    {
        removeNode(head, tail);
        return 1 + remove_except(next, tail);
    }
    return remove_except(next, tail);
}