嵌套的N层循环

时间:2022-03-20 20:26:21
问题在这里http://bbs.csdn.net/topics/220017714
实现嵌套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层循环太过牵强了。

引用 楼主 ws0308 的回复:
问题在这里http://bbs.csdn.net/topics/220017714
实现嵌套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;
}

#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


引用 2 楼 hello_world000 的回复:

//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);
}


这个算法楼主可以参考一下。

#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层循环太过牵强了。

引用 楼主 ws0308 的回复:
问题在这里http://bbs.csdn.net/topics/220017714
实现嵌套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;
}

#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


引用 2 楼 hello_world000 的回复:

//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);
}


这个算法楼主可以参考一下。

#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);
}

#5