2015-06-11 2 views
0

У меня эта функцииРекурсия область применения данные выпуск

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, не сохраняются при выходе из функции. Кто-нибудь знает, почему это происходит?

+0

Не могли бы вы уточнить ваш код? 'if()' и 'else()' не имеют смысла. – Bastien

+0

Это недопустимо C++. Трудно сказать, что не так в функции, которую вы не хотите рассказывать, что содержит. – 6502

+1

Вы объявляете свои узлы локальной переменной, которая теряет свою область действия при выходе из функции. Что именно вы подразумеваете под «спасением»? – petersohn

ответ

0

ваши узлы разрушаются перед новым вызовом вашей функции, чтобы понять проблему ясно добавить деструктор узел как следующий код:

struct node 
{ 
    node():name("Root: ") 
    { 

    } 

    std::string name; 
    vector<node> children; 
    std::vector<int> payoffs; 

    ~node() 
    { 
     cout<< "I am node"<<name<<" "<<__FUNCTION__<<"()"<<endl; 
    } 


}; 
+0

спасибо, что делает «__ FUNCTION__»? –

+0

он просто просматривает имя функции – abdulrhmanOmran

Смежные вопросы