[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Рекурсия без циклов
kilogram

function p($n){
$n = 0;
if($n<6) {echo $n; $n++; } else {return false; }
}

p(5);


Как написать рекурсивную функцию не испульзуя какие-нибудь циклы? Пробую, выводит только первый раз и все.
soniclord
Зачем это нужно? Циклы не просто так изобрели, они работают намного быстрее чем вручную инкрементировать. Сделать в принципе можно, но код будет намного больше чем с циклом.
glock18
Ну, больше не намного, но совсем неуместен будет - факт. Мне знакомо ощущение, когда хочется обойтись циклом без рекурсии, но наоборот - нечто laugh.gif

kilogram
есть один способ для ярых некрофилов wink.gif
http://php.net/manual/ru/control-structures.goto.php
ruzarh

function p($n){
echo $n;

if($n<6) {

$n++;
p($n);

} else {

return false;

}
}

p(0);
Тебе что то такое надо? Только для чего этим пользоваться?

_____________
Не портите мои нервные клетки, так как в них живут нервные тигры!
I++
Цикл быстрее рекурсии.

Целесообразно использовать рекурсию до небольшой глубины, если глубина большая, то будет жрать много памяти.
ruzarh
Цитата (kilogram @ 19.04.2012 - 23:20)
Как написать рекурсивную функцию не испульзуя какие-нибудь циклы?

Вот я и написал. Но то что код не применим в жизни я тоже уточнил. Самая сложная рекурсия у меня была это постойка дерева с неизвестной длинной, когда файл подключал сам себя и рекурсился дальше, там у меня мозг взрывался.

_____________
Не портите мои нервные клетки, так как в них живут нервные тигры!
Tato
Всем привет!
Как начинающий в 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
а что помешало создать свою тему?

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Tato
Вы правы на создать!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.