递归计算在不使用静态局部变量,全局变量或静态函数的情况下,在递归函数中发生的环数
Recursively count the number of loops that occur in a recursive function without using a static local variable, global variable, or static function?
在我的递归考试中,我必须编写递归函数,该递归函数通过链接列表,并删除所有不包含某些数据的节点,并计算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);
}
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 如何在Elixir中调用递归函数并行
- 递归函数有效,但无法记忆
- 为什么我的递归函数按降序打印,然后按升序打印?
- 为什么递归函数的最终输出是 5?
- 有没有办法使用递归函数找到数组中最小值的 INDEX?C++
- 如何将记忆应用于此递归函数?
- 如何从递归函数中完全返回,该函数给出了每个函数结果的累积相加?
- 无穷大而循环时具有递归函数
- 即使没有调用这个递归函数,它是如何工作的?
- 如何将递归函数(具有两个基本情况)转换为迭代函数
- 如何使递归函数在进入下一级循环之前读取每个新实例
- 递归计算在不使用静态局部变量,全局变量或静态函数的情况下,在递归函数中发生的环数
- 编译时间递归函数以计算两个整数的下一个功能
- 如何在不使用静态变量的情况下从递归函数中只调用另一个函数一次
- 递归函数是否可以在不将常量作为参数发送的情况下了解首次调用它的函数中的常量
- 如何跟踪递归函数的调用堆栈使用情况
- 计算在不进行排列的情况下递归相加为N的方法的数量
- 在不创建多个副本的情况下,可以在递归函数中执行命中和尝试矩阵吗?
- 为什么这个递归函数在基本情况似乎得到满足后继续被调用