变量嵌套 for 循环

2021-12-11 00:00:00 nested for-loop c++

我想弄清楚如何使用递归来执行 n 级嵌套 for 循环.例如,如果 n=3,就会有 3 个级别"

I'm trying to figure out how I can use recursion to do n-level nested for loops. For example, if n=3, there would be 3 'levels'

for(z=0;z<6;z++){
   for(y=0;y<6;y++){
      for(x=0;x<6;x++){
         if (z+y+x==f){
            //do something
         } 
      }
   }
}

等等.

我似乎无法弄清楚如何将 if 循环放置在最后一个 for 循环中,以及如何从 if 语句访问前一个 for 循环的变量.我知道变量嵌套循环的问题已经被问过很多次了,我已经浏览了所有这些问题.但似乎没有人帮助我.

I can't seem to figure out how I would be able to place the if loop in the last for loop and how I can access the variables of previous for loops from the if statement. I know that the question of variable nested loops has been asked alot of times, and I have looked through all of them. But none seem to help me.

有人可以提出一种使用递归来实现这一目标的简单方法,请记住我仍然是 C++ 的初学者,为我指明正确的方向吗?

Could someone present an easy way of using recursion to achieve this, keeping in mind that I'm still a beginner in c++, to point me in the right direction?

用例如下:

编写程序输入骰子的个数m.程序将输出可能案例的总数、每个可能 n 的可能案例数量以及具有最高概率的 n.注意:只有一个输入 m 被读入. n 由程序计算

Write a program to input the number of dice m. The program will output the total number of possible cases, the number of possible cases for each possible n and the n with the highest probability. Note: only one input m is read in. n is computed by the program

示例如果用户输入 m=2 则程序应输出

Example if user enters m=2 then program should output

可能的病例总数为 36.
可能性是
2 1
3 2
4 3
.
.
.
12 1

The total number of possible cases is 36.
The possibilities are
2 1
3 2
4 3
.
.
.
12 1

推荐答案

这是一个普通的旧 C++ 示例.首先,我为每个维度创建一个范围向量,称为 maxes.如果所有索引的总和为 2,那么我打印做了一些事情.在示例中,我将 z 从 0 循环到 1,将 y 从 0 循环到 2,将 x 从 0 循环到 3

Here's an example in plain old C++. First I make a vector of the ranges for each dimension called maxes. if the sum of all indices are 2 then I print did something. In the example I loop z from 0 to 1, y from 0 to 2, x from 0 to 3

你肯定可以把它弄得更整洁.

You can for sure make this more neat.

这里是:

#include <iostream>
#include <vector>
using namespace std;

int f(){ 
    return 2 ;
}

void inner(int depth,vector<int> & numbers,vector<int> & maxes){
  if (depth>0){
     for(int i=0;i<maxes[depth-1];i++){
        numbers[depth-1]=i;
        inner(depth-1, numbers,maxes) ;
     }
  }else{
     // calculate sum of x,y,z:
     cout << "values are ";
     for(int i=0;i<numbers.size();i++){
        cout <<numbers[i]<<" ";
     }
     int thesum(0);
     for(int i=0;i<numbers.size();i++){
        thesum+=numbers[i];
     }
     if (thesum==f()){
        cout << "did something! ";
     }
     cout<<endl;
   }
}

void donest(){
   vector<int>  numbers;
   numbers.resize(3);
   vector<int>  maxes;
   maxes.push_back(4);
   maxes.push_back(3);
   maxes.push_back(2);
   inner(numbers.size(),numbers,maxes);
}

int main(){
   donest();
}

结果:

values are 0 0 0 
values are 1 0 0 
values are 2 0 0  did something! 
values are 3 0 0 
values are 0 1 0 
values are 1 1 0  did something! 
values are 2 1 0 
values are 3 1 0 
values are 0 2 0  did something! 
values are 1 2 0 
values are 2 2 0 
values are 3 2 0 
values are 0 0 1 
values are 1 0 1  did something! 
values are 2 0 1 
values are 3 0 1 
values are 0 1 1  did something! 
values are 1 1 1 
values are 2 1 1 
values are 3 1 1 
values are 0 2 1 
values are 1 2 1 
values are 2 2 1 
values are 3 2 1 

相关文章