void generateRec(vector<string>& ret, string& str, int left, int right, int pos, int n) { if(pos == n) { ret.push_back(str); return; } if(left > 0) { str[pos] = '('; generateRec(ret,str,left-1,right,pos+1,n); } if(right > left) { str[pos] = ')'; generateRec(ret,str,left,right-1,pos+1,n); } }
vector<string> generateParenthesis(int n) { // Start typing your C/C++ solution below // DO NOT write int main() function vector<string> ret; if(n <= 0) return ret; string str(2*n,' '); generateRec(ret,str,n,n,0,2*n); return ret; }
/** * Generate code for a projection of a group of mutually recursive definitions */ string DocCompiler::generateRecProj(Tree sig, Tree r, int i, int priority) { string vname; Tree var, le; //cerr << "*** generateRecProj sig : \"" << ppsig(sig) << "\"" << endl; if ( ! getVectorNameProperty(sig, vname)) { faustassert(isRec(r, var, le)); //cerr << " generateRecProj has NOT YET a vname : " << endl; //cerr << "--> generateRecProj calls generateRec on \"" << ppsig(sig) << "\"" << endl; generateRec(r, var, le, priority); faustassert(getVectorNameProperty(sig, vname)); //cerr << "<-- generateRecProj vname : \"" << subst("$0(t)", vname) << "\"" << endl; } else { //cerr << "(generateRecProj has already a vname : \"" << subst("$0(t)", vname) << "\")" << endl; } return subst("$0(t)", vname); }
void VectorCompiler::generateCodeRecursions (Tree sig) { Tree id, body; string code; //cerr << "VectorCompiler::generateCodeRecursions( " << ppsig(sig) << " )" << endl; if (getCompiledExpression(sig, code)) { //cerr << "** ALREADY VISITED : " << code << " ===> " << ppsig(sig) << endl; return; } else if( isRec(sig, id, body) ) { //cerr << "we have a recursive expression non compiled yet : " << ppsig(sig) << endl; setCompiledExpression(sig, "[RecursionVisited]"); fClass->openLoop(sig, "count"); generateRec(sig, id, body); fClass->closeLoop(sig); } else { // we go down the expression vector<Tree> subsigs; int n = getSubSignals(sig, subsigs, false); for (int i=0; i<n; i++) { generateCodeRecursions(subsigs[i]); } } }