I am having trouble figuring out how to make my recursive functions work properly. The idea is that I have two sets A and B and I need to print all of the inductive functions of A to B. This is my recursive function for doing this however the output (listed below) is not accurate and I while I can see why the issue exists I am having trouble figuring out how to solve it...

Currently I have the correct number of outputs for A = {a,b,c} and B = {1,2,3,4} which is 24, but they contain functions with repeated numbers in them which is not acceptable. Also I lose the B[0] once I pass it and therefore lose the subset {2,1,3} for example...

Any guidance would be appreciated.

``void nextFunction(vector<string> A,vector<string> B,vector<string> func,int left,mpq_class total,int index) {if (left == 0) {print(func, A);return;}for (int i = index; i < B.size(); ++i) {func.push_back(B[i]);nextFunction(A, B, func, left-1, total, index+1);func.pop_back();}}void print(vector<string> function, vector<string> A) {for (int i = 0; i < (A.size()); ++i) {cout << "(" << A[i] << "," << function[i] << ") ";}cout << endl;}``

Output:

(a,1) (b,2) (c,3)

(a,1) (b,2) (c,4)

(a,1) (b,3) (c,3)

(a,1) (b,3) (c,4)

(a,1) (b,4) (c,3)

(a,1) (b,4) (c,4)

(a,2) (b,2) (c,3)

(a,2) (b,2) (c,4)

(a,2) (b,3) (c,3)

(a,2) (b,3) (c,4)

(a,2) (b,4) (c,3)

(a,2) (b,4) (c,4)

(a,3) (b,2) (c,3)

(a,3) (b,2) (c,4)

(a,3) (b,3) (c,3)

(a,3) (b,3) (c,4)

(a,3) (b,4) (c,3)

(a,3) (b,4) (c,4)

(a,4) (b,2) (c,3)

(a,4) (b,2) (c,4)

(a,4) (b,3) (c,3)

(a,4) (b,3) (c,4)

(a,4) (b,4) (c,3)

(a,4) (b,4) (c,4)

Although I don't really think this problem is a good candidate for recursion, your algorithm might look something like the following:

``````PrintPossibleFunctions (range_values, already_chosen, fn_def):

if fn_def.size() == domain.size():
print elements in order, preceded by the corresponding domain element
return

for value in range_values: