static void do_combsum(const int *nums, int len, int cursum, int tgt) { int i, t, oldansp; if (cursum == tgt) { addres(); return; } if (len <= 0) return; for (i = 0; i < len; i++) { if (cursum + nums[i] > tgt) return; t = cursum; oldansp = ansp; while ((t + nums[i]) <= tgt) { t += nums[i]; addans(nums[i]); do_combsum(nums + i + 1, len - i - 1, t, tgt); } ansp = oldansp; } }
Node * createEmptyNode(){ Node* ret = (Node*)malloc(sizeof(Node)); ret->ismarkedforfree = 0; ret->op = NONE; ret->left = NULL; ret->right = NULL; ret->env = NULL; ret->data = NULL; addres(NODETYPE, ret); return ret; }