如何在C或Objective C中嵌套for循环

时间:2011-01-01 22:02:31

标签: objective-c c loops

如何做这样的事情

for(int a = 0; a<2; a++){
        for(int b = 0; b<2; b++){
            for(int c = 0; c<2; c++){
                for(int d = 0; d<2; d++){

                    n[a+b+c+d]=x[a]*y[b]*z[c]...
}}}}

但我有x [n] ......

3 个答案:

答案 0 :(得分:3)

递归:

void do_sum(double *n, double *x, int limit, int index, double sum)
{
    if (limit == 0)
        n[index] = sum;
    else
        for (int a = 0; a<2; a++)
            do_sum(n, x, limit-1, index+a, sum+x[a]);
}

要启动递归,请从do_sum(n, x, max_n, 0, 0)

开始

答案 1 :(得分:0)

@jbx是对的:递归是要走的路。假设n[]x[]是全局变量:

void
work(int depth, int n_index, int x_total)
{
    if (depth == 0) {
        n[n_index] = x_total;
    }
    else {
        for (int i = 0; i < 2; i++) {
            work(depth-1, n_index+i, x_total+x[i]);
        }
    }
}

void
do_multidimensional_thing(int depth)
{
    work(depth, 0, 0);
}

答案 2 :(得分:0)

实际上,每个维度的深度仅为2,即2 * N总的可能性。 奇怪的是它会在n []中为不同的值访问相同的元素,覆盖一些东西:

a = 0,b = 1,c = 0,d = 1 a = 1,b = 1,c = 0,d = 0 ...

n [a + b + c + d]实际上只是为C(4,2)等索引到n [2]。 我认为实际问题应该被标记并重新思考。

这似乎不是一个经过深思熟虑的问题。

但是如果有的话 - 我会选择回溯(递归)方法,如果这真的是用户想要的。 (特别是如果有N个维度 - 因为没有真正好的方法可以迭代地执行此操作,除非您想在此处应用dp,这可能超出最终用户的头部)