0
我有這樣一段代碼:翻了環插入一個遞歸
for (int i=0; i<N; i++)
{
int j;
if (i%2==1) j=1;
else j=0;
for (; j<N; j+=2)
{
for(int k=0; k<N; k++)
{
int n;
if (k%2==1) n=1;
else n=0;
for (; n<N; n+=2)
{
for (int l=0; l<N; l++)
{
int o;
if (l%2==1) o=1;
else o=0;
for (; o<N; o+=2)
{
for(int m=0; m<N; m++)
{
int p;
if (m%2==1) p=1;
else p=0;
for (; p<N; p+=2)
{
if (check_full(lenta,i,j,k,n,l,o,m,p))
{
count++;
cout<<"Lenta uzsipilde: ("<<i<<","<<j<<"), "<<"("<<k<<","<<n<<"), "<<"("<<l<<","<<o<<"), "<<"("<<m<<","<<p<<"), "<<endl;
}
}
}
}
}
}
}
}
}
有沒有什麼辦法可以變成遞歸?基本上這些循環爲給定的問題找到了所有可能的座標。如果它可以轉換成一個小的遞歸,我需要使用數組而不是8個變量?
這裏就是我試圖這樣做,但它不工作:
void findBishops(){
for (int i=0; i<N; i++){
int j;
if (i%2==1) j=1;
for (; j<N; j+=2){
putIntoArray(array, i, j);
if (isFull(board, array)){
PrintAnswer(array);
}else{
arrayCount = arrayCount-2;
findBishops();
}
}
}
}
void putIntoArray(array[], i, j){
array[arrayCount++] = i;
array[arrayCount++] = j;
}
你需要一個其他的if(i%2 == 1)j == 1;在findBishops中。 –
哦,對,謝謝!但這不是問題。在我看來,整個功能寫得很糟糕,我很幸運修復它。 –
你能簡單介紹一下你的任務嗎?你在你的問題中所說的話不清楚。 –