C 如何在递归中从当前调用访问上一个调用的变量值

C 如何在递归中从当前调用访问上一个调用的变量值,c,recursion,data-structures,b-tree,C,Recursion,Data Structures,B Tree,我正在制作一个递归函数,在btree中插入值。在移动到下一个节点之前,我保存该节点的地址(pds\u parent),以便始终有一个指针指向父节点 但是每次(node*pds\u parent;)都会初始化pds\u parent,因此我不会访问节点的父节点,如何在进入递归(即访问子节点)和退出递归(即移回父节点)时访问节点的父节点 void insertion(node *pds, int item){ node *pds_parent; if(pds[0]->limit

我正在制作一个递归函数,在
btree
中插入值。在移动到下一个节点之前,我保存该节点的地址
(pds\u parent)
,以便始终有一个指针指向父节点

但是每次
(node*pds\u parent;)
都会初始化
pds\u 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
关键字。你可以阅读更多关于它的内容

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

静态节点*pds\u parent=NULL;

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


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

将其作为参数传递?(不是关于主要问题)对于
拆分(pds\u父项,值,pds),您对
值的所有定义都将不可见
Move
value
定义上面的
if(loc==0)
并在
if
分支中只保留赋值。当我像你说的那样将父指针作为参数传递(节点*父节点)时,是否需要对父节点使用静态变量我完全同意。这就是为什么我说我宁愿使用这种方法。然而,从你的问题来看,在我看来,静态变量也是合适的。