如何从递归中的当前调用访问上一次调用的变量值
how to access variable values of previous call from current call in recursion
我正在制作一个递归函数以在 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 建议的。
我正在制作一个递归函数以在 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 建议的。