2013-10-08 29 views
0

我已经搜索并发现了类似的问题,但他们都似乎不适合我的。基本上,我需要编写一个递归函数,它嵌套一个循环N次,并仅在最后一个循环中打印所有内容。如果你能找到解决问题的另一个解决方案,那会很好。与基于递归的N嵌套for循环有一个逻辑问题

0 = * 
1 = + 
2 = ABC 
3 = DEF 
... 
8 = STU 
9 = VWXYZ 

这里是全码:http://pastebin.com/2YdQ693N

这里是硬编码的N = 3实施例:

//sout is a vector<string> 

for(int i = 0; i < sout[0].size(); i++) 
{ 
    for(int j = 0; j < sout[1].size(); j++) 
    { 
     for(int k = 0; k < sout[2].size(); k++) 
     { 
      cout << sout[0][i] << sout[1][j] << sout[2][k] << endl; 
     } 
    } 
} 

该特定示例中的下面的输出(输入为 “123”) :

+AD 
+AE 
+AF 
+BD 
+BE 
+BF 
+CD 
+CE 
+CF 

我来这里是类似于这样一个递归函数之前得到的最接近他重新:http://v2.cplusplus.com/forum/beginner/68434/但我无法让它为我的情况工作。

我所需要的索引在这种类型的顺序去:

000 
001 
002 
010 
011 
012 
020 
021 
022 

除了长度必须是可变的(因此高度以及)。

这里是我的递归函数我到目前为止一直在努力:

void recurseLoop(const vector<string>& sout, int numLoops) 
{ 
    if(numLoops > 0) 
    { 
     for(int i = 0; i < sout[1].size(); i++) 
     { 
      //cout << i; 
      recurseLoop(sout, numLoops - 1); 
     } 
    } 
    else 
    { 
     //cout << endl; 
     return; 
    } 
} 

然而,结果是“我”给是非常难以理解的,我遇到了麻烦循环的正确结构/如果声明让这个工作。任何帮助表示赞赏!

回答

0
void recursion(int N, const vector<string>&sout, vector<int>&index, int I=0) 
{ 
    if(I<N-1) 
    for(index[I]=0; index[I]<sout[I].size(); index[I]++) 
     recursion(N,sout,index,I+1); 
    else if(I==N-1) 
    for(index[I]=0; index[I]<sout[I].size(); index[I]++) { 
     for(int k=0; k<N; ++k) 
     std::cout << sout[k][index[k]]; 
     std::cout << std::endl; 
    } 
} 

void loop_N_times(const vector<string>&sout) 
{ 
    std::vector<int> index(sout.size()); 
    recursion(sout.size(),sout,index,0); 
} 
+0

你的意思是使用index [i] user2859815

+0

是的,是cource的。纠正。 – Walter

0

为什么你总是在递归中使用sout[1]?它可能应该是像

for (int i = 0; i < sout[sout.size() - numLoops].size(); ++i) 
+0

我使用测试,但有一个变量替换没有做别的了。我会尝试你的解决方案! – user2859815

+0

我从以下代码获得的输出:http://pastebin.com/WPXQchR4所以它看起来像缺少了几个0等。 – user2859815