c – 变量嵌套for循环
我试图找出如何使用递归来执行n级嵌套for循环.
例如,如果n = 3,则会有3个“级别” 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循环的变量.我知道变量嵌套循环的问题已经被问了很多次,我已经查看了所有这些.但似乎没有人帮助我. 有人能提出一种简单的方法来使用递归来实现这一点,请记住我仍然是c的初学者,指出我正确的方向吗? 用例如下:
解决方法
这是普通老C的一个例子.首先,我为每个维度创建一个名为maxes的范围向量.如果所有索引的总和是2,那么我打印做了一些事情.
在示例中,I循环z从0到1,y从0到2,x从0到3 你可以肯定让它更整洁. 开始: #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(),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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |