递归参数中递增运算符的使用
backtrack(k,n,sum,i+1); backtrack(k,n,sum,i++);
在 C++ 中,递增运算符 i++ 和表达式 i+1 之间有显著的区别:
- i++ 是后置递增运算符,表示先使用 i 的当前值,然后将 i 加 1。
- i+1 是一个简单的算术运算,返回 i 的当前值加 1,但不改变 i 的值。
backtrack(k, n, sum, i + 1); // 正确, 传递 i 的下一值,但不改变 i 的值 backtrack(k, n, sum, i++); // 错误, 传递当前 i 的值,然后 i 自增1
详细描述
- backtrack(k, n, sum, i + 1);这里传递了 i 的值加 1,但是 i 本身的值不会改变。所以,这并不会对当前递归状态下的 i 产生影响。
- backtrack(k, n, sum, i++);在这种情况下,i++ 是后置递增运算符,这意味着当前函数调用传递的是 i 的原始值,然后 i 自增 1。这可能是不想要的效果,特别是在递归函数调用中,因为它在修改 i 之后继续使用它,可能会导致索引管理混乱。
正确的方法:
一般来说,在递归和回溯中,你希望传递给下一层递归的是当前索引的下一个值而不是原始值并自增。所以,使用 i + 1 更加合适。
案例:
class Solution { public: vector path; vector res; void backtrack(int k,int n,int sum,int start) { if(path.size()==k) { if(sum==n) { res.push_back(path); } return; } for(int i=start;i
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。