我们可以一开始假设,有一个函数,是实现 5 层循环打印的程序,那么它会循环 n 次,每次调用一个实现 4 层循环打印的程序。
1 2 3 4 5 6 7 8 9 10 11
//代码框架 intprint_loop(int k, int n) { //代表 k 层循环的程序,然后循环 n 次,每次调用一个 k - 1 层循环的程序。 if (k == 0) { // 打印一行 } for (int i = 1; i <= n; i++) { print_loop(k - 1, n); } return; }
int arr[100]; /* 入参: total_k,代表了一共有多少层循环,这个参数是为了方便我们最后确定循环输出的上界 */ voidprint_loop(int k, int n, int total_k) { if (k == 0) { for (int i = total_k; i >= 1; i--) { if (i != total_k) printf(" "); printf("%d", arr[i]); } printf("\n"); return ; } for (int i = 1; i <= n; i++) { arr[k] = i; print_loop(k - 1, n, total_k); } return ; }