用于模拟嵌套for
循环中,您应该只为每次递归调用增加计数器变量之一,具体取决于您是“处于”内部循环还是外部循环中。此外,外循环调用需要将内循环计数器重置为零。
/* i for outer loop, j for inner loop, both going 0 to n-1 */
void recursion(int n, int i, int j)
{
if (i < n) {
if (j < n) {
// inner loop when j < n
printf("i=%d, j=%d\n",i,j); // inner loop body
recursion(n, i, j+1); // increment inner counter only!
} else { // when j has reached n...
// outer loop, which restarts inner loop
recursion(n, i+1, 0); // increment outer counter, reset inner
// since we're starting a new inner loop
}
}
}
如果最初被称为recursion(N, 0, 0)
这应该大致相当于:
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
printf("i=%d, j=%d\n", i, j);
}
}
...除了它不考虑修改i
在内循环中(这些示例中没有发生,但如果内循环确实设置了i
比大N
,递归版本将打破两个循环,而不先完成内部循环)。