当函数调用中的值增加时程序工作正常,但如果我们在单独的行中增加值而不是调用函数,则会出错。为什么?
Programme works fine when value incremented in function call but gives error if we increase value in separate line and than call function . why?
**问题是“编写一个函数来生成长度为 2*n 的格式正确的括号的所有组合。*
例如,给定 n = 3,解集为:
" ((())) ", " (()()) ", " (())() ", " ()(()) ", " ()()() " .*
我在其中进行函数调用的第一个代码
GenerateParenthesis(n, l + 1, r, ans)
工作正常并打印所需的输出:((()))
但是在第二个代码中,当我像
这样进行功能调用时
l=l+1; GenerateParenthesis(n, l , r, ans)
;给出像 : ))) 这样的输出。为什么?
// l 用于左括号(左),r 用于右括号(右)
这里有两个代码
void GenerateParenthesis(int n, int l, int r, vector&ans) {
if (l == n && r == n) {
ans.push_back(helper);
return;
}
if (r > l)return;
if (l > n || r >= n)return;
helper.push_back('(');
GenerateParenthesis(n, l + 1, r, ans);
helper = helper.substr(0, helper.size() - 1); //pop_back();
helper.push_back(')');
GenerateParenthesis(n, l, r + 1, ans);
helper = helper.substr(0, helper.size() - 1); //pop_back();
}
void GenerateParenthesis(int n, int l, int r, vector&ans) {
if (l == n && r == n) {
ans.push_back(helper);
return;
}
if (r > l)return;
if (l > n || r >= n)return;
helper.push_back('(');
l=l+1;
GenerateParenthesis(n, l , r, ans);
helper = helper.substr(0, helper.size() - 1);
helper.push_back(')');
r=r+1;
GenerateParenthesis(n, l, r, ans);
helper = helper.substr(0, helper.size() - 1);
}
在第一种情况下,每次递归调用 GenerateParenthesis(n, l + 1, r, ans)
,l+1
和 r+1
的结果仅传递给被调用者,不会更改变量 [=13] 的值=] 和调用者的 r
。
在第二种情况下,每次递归调用 GenerateParenthesis(n, l, r, ans)
时,l+1
和 r+1
的结果都会传递给被调用者并更改变量 [=13= 的值] 和来电者的 r
。
因此,每次函数 returns 从其递归调用中,变量 l
和 r
的值在这两种情况下都会不同,计算可能会有所不同。
**问题是“编写一个函数来生成长度为 2*n 的格式正确的括号的所有组合。* 例如,给定 n = 3,解集为: " ((())) ", " (()()) ", " (())() ", " ()(()) ", " ()()() " .*
我在其中进行函数调用的第一个代码
GenerateParenthesis(n, l + 1, r, ans)
工作正常并打印所需的输出:((())) 但是在第二个代码中,当我像
这样进行功能调用时l=l+1; GenerateParenthesis(n, l , r, ans)
;给出像 : ))) 这样的输出。为什么? // l 用于左括号(左),r 用于右括号(右)
这里有两个代码
void GenerateParenthesis(int n, int l, int r, vector&ans) {
if (l == n && r == n) {
ans.push_back(helper);
return;
}
if (r > l)return;
if (l > n || r >= n)return;
helper.push_back('(');
GenerateParenthesis(n, l + 1, r, ans);
helper = helper.substr(0, helper.size() - 1); //pop_back();
helper.push_back(')');
GenerateParenthesis(n, l, r + 1, ans);
helper = helper.substr(0, helper.size() - 1); //pop_back();
}
void GenerateParenthesis(int n, int l, int r, vector&ans) {
if (l == n && r == n) {
ans.push_back(helper);
return;
}
if (r > l)return;
if (l > n || r >= n)return;
helper.push_back('(');
l=l+1;
GenerateParenthesis(n, l , r, ans);
helper = helper.substr(0, helper.size() - 1);
helper.push_back(')');
r=r+1;
GenerateParenthesis(n, l, r, ans);
helper = helper.substr(0, helper.size() - 1);
}
在第一种情况下,每次递归调用 GenerateParenthesis(n, l + 1, r, ans)
,l+1
和 r+1
的结果仅传递给被调用者,不会更改变量 [=13] 的值=] 和调用者的 r
。
在第二种情况下,每次递归调用 GenerateParenthesis(n, l, r, ans)
时,l+1
和 r+1
的结果都会传递给被调用者并更改变量 [=13= 的值] 和来电者的 r
。
因此,每次函数 returns 从其递归调用中,变量 l
和 r
的值在这两种情况下都会不同,计算可能会有所不同。