递归中的引用

Refrences in recursion

本文关键字:引用 递归      更新时间:2023-10-16

我在此代码中使用了引用map<int ,int>但是当我不使用引用时,映射不会递归填充。我已经解决了这个问题,但不知道为什么当我已经提供map<int ,int>作为参数时需要使用引用。你能深入说明一下吗?

void util(Node* root,map<int,int> &m, int level) {
if (!root) return;
m[level]+=root->data;
util(root->right,m,level);
util(root->left,m,level+1);
}
void diagonalSum(Node* root) {
map<int,int> m;
util(root,m,0);
// cout<<m.size();
for(auto i=m.begin();i!=m.end();i++){
cout<<i->second<<" ";
}
cout<<"n";
}

不使用引用时,调用函数时会获得映射的副本。

来自评论: 如果按值传递,则每个函数调用都将收到映射的副本。修改副本不会修改原始副本。