首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++动态嵌套循环

C++动态嵌套循环
EN

Stack Overflow用户
提问于 2016-01-17 05:45:30
回答 1查看 1.1K关注 0票数 2

我试图用动态循环数来计算以下数量。伪代码看起来像

当k= 1,

代码语言:javascript
复制
for (x1 =0;x1<=nmax[1];x1++){
    a = a + x1 * (x1>upper[1]);
}

当k=2

代码语言:javascript
复制
for (x1 =0;x1<=nmax[1];x1++){
    for (x2 =0;x2<=nmax[2];x2++){
        a = a + x1 * (x1<upper[1]) * x2 *(x1+x2>upper[2]);
    }
}

当k=3时

代码语言:javascript
复制
for (x1 =0;x1<=nmax[1];x1++){
    for (x2 =0;x2<=nmax[2];x2++){
        for (x3 =0;x3<=nmax[3];x3++){
            a = a + x1 * (x1<upper[1]) * x2 *(x1+x2<upper[2]) * x3 *(x1+x2+x3>upper[3]);
        }
    }
}

nmax和上是预定义的向量。

为了说明布尔表达式背后的逻辑,例如,随着k的增加,布尔表达式发展如下。对于第一个到第二个在最后一个之前,它是<;而最后一个使用>。

代码语言:javascript
复制
(x1>upper[1])
(x1<upper[1]) AND (x1+x2>upper[2]) 
(x1<upper[1]) AND (x1+x2<upper[2]) AND (x1+x2+x3>upper[3])
(x1<upper[1]) AND (x1+x2<upper[2]) AND (x1+x2+x3<upper[3]) AND (x1+x2+x3+X4>upper[4])
(x1<upper[1]) AND (x1+x2<upper[2]) AND (x1+x2+x3<upper[3]) AND (x1+x2+x3+x4<upper[4]) AND (x1+x2+x3+x4+x5>upper[5])

是否有一种方法可以用k作为参数来编写函数以实现上述目标?

EN

回答 1

Stack Overflow用户

发布于 2016-01-17 06:31:42

我建议您使用递归函数。

代码语言:javascript
复制
int k;
int nestedLoop(int cur, int stValue) {
   int ret = 0;
   if( cur > k ) return 1;
   for(x=0;x<=nmax[cur];x++) {
       if( cur % 2 ) {
           ret = ret + x * 
               (stValue+x < upper[cur]) * nestedLoop(cur+1, stValue + x); 
       } else {
           ret = ret + x *
               (stValue+x > upper[cur]) * nestedLoop(cur+1, stValue + x);
       }
   }
   return ret
}

对不起,我现在不能测试它是正确的。但是你想要的方式是通过这种方法来实现的。

只是为了简单的案子

代码语言:javascript
复制
int k = 3;
int nestedloop(int cur) {
    if(cur > k) { return 1; }
    int ret = 0;
    int i;
    for(int i=1;i<=5;i++) {
        ret = ret + i * nestedloop(cur+1);
    }
    return ret == 0 ? 1 : ret;
}

此代码与下一段代码相同。

代码语言:javascript
复制
for(int i=1;i<=5;i++){
    for(int j=1;j<=5;j++){
        for(int k=1;k<=5;k++){
            ret = ret + i * j * k;
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34835535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档