实现嵌套N层循环,不用递归。其中6楼的伪代码好像很厉害的样子,但是还没看懂。。。
有没有哪位大牛按照哪种思路写成可执行的程序,就以下面的3层循环为例吧
#include <stdio.h>
int main(int argc, char *argv[])
{
int a,b,c;
for (a=1;a<=5;a++)
for (b=1;b<=;b++)
for (c=1;c<=5;c++)
printf("%d %d %d\n", a,b,c);
return 0;
}
5 个解决方案
#1
根本取决于你要解决的算法,用迭代取代递归是完全没有问题的,只是你所归纳的嵌套N层循环太过牵强了。
#2
//depth表示循环嵌套层数,n表示每层循环的取值个数即[1, n]
void func(int depth, int n)
{
int cur = 0;
int *tab = (int *)malloc(n * sizeof(int));
for (*tab = 0; cur >= 0; ) {
++tab[cur];
if (tab[cur] <= n) {
if (cur == depth - 1) {
int i;
for (i = 0; i < depth; ++i) {
printf("%d ", tab[i]);
}
printf("\n");
} else {
tab[++cur] = 0;
}
} else {
--cur;
}
}
free(tab);
}
#3
这个算法楼主可以参考一下。
#4
二楼代码动态内存申请大小有点问题,应更正下:
//depth表示循环嵌套层数,n表示每层循环的取值个数即[1, n]
void func(int depth, int n)
{
int cur = 0;
int *tab = (int *)malloc(depth * sizeof(int));
for (*tab = 0; cur >= 0; ) {
++tab[cur];
if (tab[cur] <= n) {
if (cur == depth - 1) {
int i;
for (i = 0; i < depth; ++i) {
printf("%d ", tab[i]);
}
printf("\n");
} else {
tab[++cur] = 0;
}
} else {
--cur;
}
}
free(tab);
}
#1
根本取决于你要解决的算法,用迭代取代递归是完全没有问题的,只是你所归纳的嵌套N层循环太过牵强了。
#2
//depth表示循环嵌套层数,n表示每层循环的取值个数即[1, n]
void func(int depth, int n)
{
int cur = 0;
int *tab = (int *)malloc(n * sizeof(int));
for (*tab = 0; cur >= 0; ) {
++tab[cur];
if (tab[cur] <= n) {
if (cur == depth - 1) {
int i;
for (i = 0; i < depth; ++i) {
printf("%d ", tab[i]);
}
printf("\n");
} else {
tab[++cur] = 0;
}
} else {
--cur;
}
}
free(tab);
}
#3
这个算法楼主可以参考一下。
#4
二楼代码动态内存申请大小有点问题,应更正下:
//depth表示循环嵌套层数,n表示每层循环的取值个数即[1, n]
void func(int depth, int n)
{
int cur = 0;
int *tab = (int *)malloc(depth * sizeof(int));
for (*tab = 0; cur >= 0; ) {
++tab[cur];
if (tab[cur] <= n) {
if (cur == depth - 1) {
int i;
for (i = 0; i < depth; ++i) {
printf("%d ", tab[i]);
}
printf("\n");
} else {
tab[++cur] = 0;
}
} else {
--cur;
}
}
free(tab);
}