Всем привет!
Как начинающий в php не могу понять как работает рекурсия в приведенных мною примерах.
Как известно любой php код работает сверху вниз. Поэтому для ясности я с лева приписал числа что бы описать внутреннее движение функции.
Например по моему в примере 1 движение следующее(скорее я ошибаюсь но все таки к примеру)
9>2>3>4>5>6(тут включается рекурсивный вызов функции и он повторяется 19 раз. внутренее движение функции ) при последнем 19 проведении
рекурсия должна выдать:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
а выдает:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
я догадываюсь что в:
6. recursion_w($rec++); переменная $rec=20
но не могу понять как она выводится,ведь echo находится до этого, в цыфре 5?
Пример 1
1. <?php
2. function recursion_w($rec){
3. if($rec<20){
4. static $rec;
5. echo "$rec ";
6. recursion_w($rec++);
7. }
8. }
9. recursion_w($a);
10.?>
Второй вопрос:
пример 2, код:
1. <?php
2. function recursion_w($rec){
3. if($rec<20){
4. static $rec;
5. recursion_w($rec++);
6. echo "$rec ";
7. }
8. }
9. recursion_w($a);
10.?>
Когда перемещаю echo и ставлю после рекурсивного вызова функции(5. recursion_w($rec++); 6. echo "$rec ";)
выдает число 21 21раз:
21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21
Не могу понять почему?
Пример 3
код:
1. <?php
2. function recursion_w($rec){
3. if($rec<20){
4. echo "$rec ";
5. recursion_w($rec+1);
6. }
7. }
8. recursion_w($a);
9.?>
Выдает:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
это понятно но когда в примере 4 перемещаю echo(5. echo "$rec ";) после рекурсии(4. recursion_w($rec+1); ) происходит обратный по уменьшению вывод чисел:
Код:
Пример 4
код:
1. <?php
2. function recursion_w($rec){
3. if($rec<20){
4. recursion_w($rec+1);
5. echo "$rec ";
6. }
7. }
8. recursion_w($a);
9.?>
Вывод:
19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
Объясните пожалуйста почему изменилось направление в сторону уменьшения?
для четкости понимания укажите пожалуйста внутреннее движение функции с помощью нумерации
проставленной у каждой строчки кода (пример 3. || 8>2>3>4>5(рекурсия (5>3>4) проводится 19 раз)).
Приношу свои извинения за количество вопросов!!!
Благодарю заранее.