c - 如何以递归方式从当前调用访问先前调用的变量值
问题描述
我正在制作一个递归函数来将值插入到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
关键字。你可以在这里阅读更多关于它的信息。
首先,在声明时对其进行初始化:
static node *pds_parent = NULL;
这意味着指针变量的第一个值将为 NULL。在每次递归调用之前,将其设置为正在访问的当前节点的值。另外,只有在不是时才使用它NULL
。
编辑:我还要补充一点,我宁愿将函数签名更改为并第一次void insertion(node *pds, int item, node *parent)
调用它。NULL
当然,必须使用NULL
并不漂亮,但您可以将其包装起来。我想这就是 kiran Biradar 的建议。
推荐阅读
- react-native - 大型项目的 React Native 架构 - 有什么想法吗?
- g++ - 使用 g++ 9.3.0 对 * 的未定义引用
- c# - 使用 GroupBy 从 List 中创建 SubLists,其中 GroupBy 值为 List
- node.js - 两个日期之间的 MongoDB 聚合字段
- statsmodels - stats-models 包中的 Ridge、Lasso 和 Ridge
- commit - pygithub如何获取特定分支的最新提交
- php - 只删除一次重复值,然后对数组求和
- c# - C# Coinbase Pro API 如何解决响应问题。401
- postgresql - 找不到食谱的厨师食谱
- python - 如何将项目从一个窗口中的 QListWidget 传输到另一个窗口中的另一个 QListWidget?