On Sat, 2002-03-30 at 16:16, Uros Gruber wrote:
> Hi!
> 
> This I simply don't understand why this code executes that
> way. So there is only inportant to put return after recursive
> call and it works like i wan't. I sometimes write small C
> programs and I don't remeber that code like this have to work
> that way.... Hm.

Well, that's how it's supposed to work. Look at it like this:

1: function test() {
2:    static $count = 0;
3:    $count++;
4:    echo $count;
5:    if ($count < 10) {
6:        test();
7:    }
8:    echo 'j';
9: }


So the first thing that happens is you call test(). It executes
its lines in order, including function calls. When it hits the
call to test() on line 6, it calls test(), waits for it to 
return, and then continues on to line 8, echoing 'j'. 

This happens every time through, so when you get up to $i == 10, you
have 10 test()s stacked up, each of them waiting on line 6 for the
function call to test() to return. As each test() call returns,
execution continues on to line 8, echos j, then returns.

I'm in a hurry so I don't have too much time to make this much 
clearer (and my brain is not so good today anyway). If this still
doesn't make sense then Google gives a zillion hits for 'introduction
to recursion'.


Hope this helps,

Torben

> -- 
> bye,
>  Uros                            mailto:[EMAIL PROTECTED]
> 
> 
> Sunday, March 31, 2002, 1:10:30 AM, you wrote:
> 
> LTW> On Sat, 2002-03-30 at 15:59, Uros Gruber wrote:
> >> Hi!
> >> 
> >> This is a code
> >> 
> >> function Test()
> >> {
> >>     static $count = 0;
> >> 
> >>     $count++;
> >>     echo $count;
> >>     if ($count < 10) {
> >>         Test ();
> >>     }
> >>     echo "j";
> >> }
> >> test();
> >> 
> >> Output is
> >> 
> >> 12345678910jjjjjjjjjj
> >> 
> >> Why is there 10 j at the and. If this would work it can be
> >> only one. If $count is grater than 10 it does not call itself
> >> but end. Is this maybe a bug or what.
> 
> LTW> No, there should be 10 of them, since every time Test() returns,
> LTW> the function carries on executing. If you only want one 'j'
> LTW> printed then put a return statement after the call to Test():
> 
> LTW> function Test()
> LTW> {
> LTW>     static $count = 0;
>     
> LTW>     $count++;
> LTW>     echo $count;
> LTW>     if ($count < 10) {
> LTW>         Test();
> LTW>         return;
> LTW>     }
> LTW>     echo "j";
> LTW> }
> LTW> Test();
> 
> 
> LTW> Cheers!
> 
> LTW> Torben
> 
> 
> LTW> -- 
> LTW>  Torben Wilson <[EMAIL PROTECTED]>
> LTW>  http://www.thebuttlesschaps.com
> LTW>  http://www.hybrid17.com
> LTW>  http://www.inflatableeye.com
> LTW>  +1.604.709.0506
> 
> 
> -- 
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
> 
> 
-- 
 Torben Wilson <[EMAIL PROTECTED]>
 http://www.thebuttlesschaps.com
 http://www.hybrid17.com
 http://www.inflatableeye.com
 +1.604.709.0506


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to