У меня эта функцииРекурсия область применения данные выпуск
void maketree(node &root,int numberOfPlayers, vector<node> &terminalNodes){
cout<< "How many children does (" << root.name << ") have?\n";
int numChildren;
cin >> numChildren;
vector<int> temp(numberOfPlayers);
if (numChildren == 0)
{
for (int i = 0; i <numberOfPlayers; i++)
{
cout << "what is the payoff for player " << i+1 << " at ("<< root.name <<")?";
cin >> temp[i];
}
root.payoffs = temp;
terminalNodes.push_back(root);
}
else
{
vector<node> children(numChildren);
root.children = children;
for (int i = 0; i < numChildren; i++)
{
string name = root.name + "'s child#" + to_string(i+1);
node child;
child.name = name;
root.children[i] = child;
maketree(child, numberOfPlayers, terminalNodes);
}
}
}
Но ничего, что происходит с дочерними узлами либо сохранялись, и я не могу понять, почему.
Данные, которые собираются в рекурсивном вызове (не начальном) в maketree, не сохраняются при выходе из функции. Кто-нибудь знает, почему это происходит?
Не могли бы вы уточнить ваш код? 'if()' и 'else()' не имеют смысла. – Bastien
Это недопустимо C++. Трудно сказать, что не так в функции, которую вы не хотите рассказывать, что содержит. – 6502
Вы объявляете свои узлы локальной переменной, которая теряет свою область действия при выходе из функции. Что именно вы подразумеваете под «спасением»? – petersohn