c - 如何从递归中的当前调用访问上一次调用的变量值

标签 c recursion data-structures b-tree

我正在制作一个递归函数以在 btree 中插入值。在移动到下一个节点之前,我保存了该节点的地址(pds_parent),这样我总有一个指向父节点的指针。

但是 pds_parent 每次都被初始化(node *pds_parent;),所以我不能访问节点的父节点,我如何访问节点的父节点在进入递归时,即访问子节点并退出递归,即返回父节点。

void insertion(node *pds, int item){
    node *pds_parent;
    if(pds[0]->limit==0)
    {
        pds[1]->value=item;
        pds[0]->limit++;
        return 1;
    }
    int loc=b_search(pds,item,1,limit)
    if(pds[0]->is_leaf)
    {
        if(pds[0]->limit==2)
        {
            if(loc==0)
            {
                int value=pds[1]->value;
            }
            else if(loc==1)
            {
                int value=item
            }
            else
            {

                int value=pds[2]->value;
            }
            splitting(pds_parent,value,pds);
        }
        else
        {

            pds[(pds[0]->limit+1)]->value=item;
            if(loc==limit)
            {
               pds[(pds[0]->limit+1)].nextIndex=-1;
               pds[loc].nextIndex=limit+1;
            }
            else
            {
               pds[(pds[0]->limit+1)].nextIndex=loc+1;
               pds[loc].nextIndex=limit+1;
            }
            pds[0]->limit++;
            return 1;
        }
    }
    else
    {
        pds_parent=pds;
        insertion(pds[loc]->c,int item);
    }
}

最佳答案

如果你想在函数调用之间共享一个变量,你应该使用static关键词。您可以阅读更多相关信息 here .

首先,在声明时初始化它:

static node *pds_parent = NULL;

这意味着指针变量的第一个值将为 NULL。 在每次递归调用之前,将其设置为当前正在访问的节点的值。 此外,只有在不是 NULL 时才使用它.

编辑:我还要补充一点,我宁愿将函数签名更改为 void insertion(node *pds, int item, node *parent)并用 NULL 调用它第一次。当然,必须使用 NULL不漂亮,但你可以把它包起来。我想这就是 kiran Biradar 建议的。

关于c - 如何从递归中的当前调用访问上一次调用的变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52891257/

相关文章:

javascript - 如何检测javascript中递归异步调用的完成

java - 表达式树类中的递归evaluate()

c++ - 快速线路查询的数据结构?

c - 初始化结构元素数组时出错

c - 无符号整数运算问题

c++ - 分段故障?

支持pop oldest inserted和max的C++数据结构

c# - 嵌套分组策略/算法c#

c++ - 在一次操作中进行多个矩阵-矩阵乘法

c - 未正确声明数组检测到堆栈粉碎错误