Jump to content

function => recursion problem *SOLVED ~ 10% sane-ness remaining lol*


leeming

Recommended Posts

i have added print_r()'s and print() all over these functions, and i still dont understand why it is returning a wrong value...

[code]
    function stackResearchTree($researchroot, $game = GAMEID)
    {
      /**********************************************************
      * Starts off the research tree, setting the root research *
      * returns the stack of researches                        *
      **********************************************************/
     
     
        $tree_stack = array($researchroot);  //sets up the stack, with the root research at the bottom
        return initTree($researchroot, $tree_stack);
    }

    function initTree($research, $tree_stack, $depth = 1)
    {
      /**************************************************************
      * Keeps calling its self untill all reserch needed, are found *
      **************************************************************/

      //find req1?
      $req1 = researchReq($research);

      if(!in_array($req1, $tree_stack) && $req1 > 0) //not currently in array
      {
        array_push($tree_stack, "$req1");  //add req1 to the stack
        print_r($tree_stack);
        print"<BR>";
       
        //call itself for req1 of req1
        initTree($req1, $tree_stack, $depth + 1);
      }
      //else//if($req1 == 0) //has no requirement for req1
      //{
        //array_push($tree_stack, "$research");  //add req1 to the stack  (end of the branch for this part)
      //}
      //else, do nothing, its already there


      /* do again for req2 */


      //find req2?
      $req2 = researchReq($research, 2);

      if(!in_array($req2, $tree_stack) && $req2 > 0) //not currently in array
      {
        array_push($tree_stack, "$req2");  //add req2 to the stack
        print_r($tree_stack);
        print"<BR>";
       
        //call itself for req2 of req2
        initTree($req2, $tree_stack, $depth + 1);
      }
      //else//if($req2 == 0) //has no requirement for req1
      //{
        //array_push($tree_stack, $research);  //add req1 to the stack  (end of the branch for this part)
      //}
      //else, do nothing, its already there


      if($depth != 1)  //still has more to loop
      {
        print"::$depth<BR>";
        $depth --;
        return;
      }
      else
      {
        return $tree_stack;
      }
    }

    function researchReq($researchid, $req = 1, $game = GAMEID)
    {
      /**************************************************************************
      * Finds the id of the requirement, where $req is either 1 or 2, as there  *
      * is only 2 research requirements                                        *
      **************************************************************************/
     

      $sql = "SELECT p".$req." FROM Research".gameTypeList("research", $game)." WHERE id='$researchid'";
      $query = mysql_query($sql, cdb(3))or bavaderror($sql);
      $row = mysql_fetch_row($query);
      return $row[0];
    }[/code]

Basic understanding of this is, a research tree... only 2 nodes per parent (req1 and req2)
stackResearchTree() - starts off the tree, so basically the root
researchReq() - just finds out what the requirement is, (value of req1 or req2)
initTree() - Builds up a stack, adding a unique id as it travels thru it.

here are the results i get...
[quote]
Array ( [0] => 5 [1] => 2 )
::2
Array ( [0] => 5 [1] => 2 [2] => 4 )
Array ( [0] => 5 [1] => 2 [2] => 4 [3] => 1 )
::3
Array ( [0] => 5 [1] => 2 [2] => 4 [3] => 1 [4] => 3 )
::3
::2
::end
[/quote]

And the final return (from all of it) is
[quote]Array ( [0] => 5 [1] => 2 [2] => 4 )[/quote]
which is missing 2 parts...

Is this because they are nested somehow? I can’t figure it out, as I’m returning the array, to use again to push a new value...
Link to comment
Share on other sites

[quote author=btherl link=topic=114207.msg464666#msg464666 date=1162951647]
Perhaps you should do

[code]$treestack = initTree($req1, $tree_stack, $depth + 1);[/code]

Or alternatively, you can pass $treestack by reference.
[/quote]
yes what luck eh... i solved it like a few minutes before you, after tearing my brain out all night...
yes i was returning ther stack, but when i was calling the function i wasnt assigning it to any thing.. eg.. the stack its self.. *doh*
Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.