Re: Two recursive calls inside of a recursive function
n00m wrote:
This combined with the lack of return-value
makes me wonder what the function is supposed to accomplish.
It's for counting the number of ways to fill a given grid (7x8) with
ciphers 0..6
with all 28 dominos bones. E.g., the answers for these 2 grids:
2
0 3 0 2 2 0 2 3
1 5 6 5 5 1 2 2
3 4 1 4 5 4 4 4
6 6 1 0 5 2 3 0
4 0 3 2 4 1 6 0
1 4 1 5 6 6 3 0
1 2 6 5 5 6 3 3
5 3 1 0 0 1 6 3
0 2 0 4 1 2 5 2
1 5 3 5 6 4 6 4
0 5 0 2 0 4 6 2
4 5 3 6 0 6 1 1
2 3 5 3 4 4 5 3
2 1 1 6 6 2 4 3
are 18 and 1.
Initially I wrote it in Pascal (in that the code works absolutely as
expected, so to speak).
Pascal would pass the entire array to the function, in C and C++ there is no
way to pass a native array as a parameter, only some pointer type ( int[],
int*, etc..). If you want to emulate the way Pascal is doing it, you need
to make a copy of the array and pass that, which is where vector should work
for you.
Consider:
#include <vector>
#include <iostream>
typedef std::vector<std::vector<int> > DataType;
void foo(short sch, DataType oc, DataType a, short p, short q, short fl)
{
// Etc...
}
int main()
{
DataType a;
// Size our Data to 10 by 10
for ( size_t i = 0; i < 10; ++i )
a.push_back( std::vector<int>(10) );
for ( size_t i = 0; i < 10; ++i)
for (size_t j = 0; j < 10; ++j)
a[i][j] = 7;
// This makes a copy
DataType oc = a;
for ( size_t i = 0; i < 8; ++i) {
oc[i][7]=1; oc[7][i]=1;
}
// Etc...
// Now, we want to pass a copy to foo, not the original.
// So make a copy.
DataType OCCopy = oc;
DataType ACopy = a;
foo(1,OCCopy,ACopy,1,1,1);
// Reset our copies
OCCopy = oc;
ACopy = a;
foo(1,OCCopy,ACopy,1,1,1);
}