kilogram
20.04.2012 - 03:20
function p($n){
$n = 0;
if($n<6) {echo $n; $n++; } else {return false; }
}
p(5);
Как написать рекурсивную функцию не испульзуя какие-нибудь циклы? Пробую, выводит только первый раз и все.
soniclord
20.04.2012 - 03:26
Зачем это нужно? Циклы не просто так изобрели, они работают намного быстрее чем вручную инкрементировать. Сделать в принципе можно, но код будет намного больше чем с циклом.
glock18
20.04.2012 - 07:56
Ну, больше не намного, но совсем неуместен будет - факт. Мне знакомо ощущение, когда хочется обойтись циклом без рекурсии, но наоборот - нечто
kilogramесть один способ для ярых некрофилов
http://php.net/manual/ru/control-structures.goto.php
ruzarh
22.04.2012 - 21:04
function p($n){
echo $n;
if($n<6) {
$n++;
p($n);
} else {
return false;
}
}
p(0);
Тебе что то такое надо? Только для чего этим пользоваться?
_____________
Не портите мои нервные клетки, так как в них живут нервные тигры!
Цикл быстрее рекурсии.
Целесообразно использовать рекурсию до небольшой глубины, если глубина большая, то будет жрать много памяти.
ruzarh
22.04.2012 - 22:49
Цитата (kilogram @ 19.04.2012 - 23:20) |
Как написать рекурсивную функцию не испульзуя какие-нибудь циклы? |
Вот я и написал. Но то что код не применим в жизни я тоже уточнил. Самая сложная рекурсия у меня была это постойка дерева с неизвестной длинной, когда файл подключал сам себя и рекурсился дальше, там у меня мозг взрывался.
_____________
Не портите мои нервные клетки, так как в них живут нервные тигры!
Всем привет!
Как начинающий в 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 (5. echo "$rec "; )?
Пример 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 раз)).
Приношу свои извинения за количество вопросов!!!
Благодарю заранее.
inpost
10.11.2013 - 03:38
а что помешало создать свою тему?
_____________
Обучаю веб-программированию качественно и не дорого:
http://school-php.comФрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.