首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

嵌套的N层循环解决思路

2013-10-15 
嵌套的N层循环问题在这里http://bbs.csdn.net/topics/220017714实现嵌套N层循环,不用递归。其中6楼的伪代码

嵌套的N层循环
问题在这里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;
}

递归 c c++ 算法 排列组合
[解决办法]
根本取决于你要解决的算法,用迭代取代递归是完全没有问题的,只是你所归纳的嵌套N层循环太过牵强了。

引用:
问题在这里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;
}


[解决办法]

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

[解决办法]
引用:

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



这个算法楼主可以参考一下。
[解决办法]
二楼代码动态内存申请大小有点问题,应更正下:

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

[解决办法]
http://www.codeproject.com/Articles/418776/How-to-replace-recursive-functions-using-stack-and

热点排行