嵌套循环的外循环在重新函数内未正常运行。简化示例:
uint max =3;
void func(uint a,uint b,uint depth){
for(; a<max; a++){ // problem here after first recrusion , counting but not going inside braces with recruisive function
for(; b<max; b++){ // inner loop works in recruisive function well
if(depth<2){
func(0,0,depth+1);
}
}
}
}
使用您最初发布的代码:
除非 max 为 0,否则此代码将因无限递归而导致堆栈溢出:递归中的第一次迭代将立即递归地调用函数,从 a 和 b 再次为 0 开始。
使用修改后的代码:
深度限制了递归,避免了无休止的递归。
但是,在第一次外部迭代之后,b 已达到最大值。对于 a 循环中的所有连续迭代,由于您不重置 b,内部循环会立即停止