|
|
|
|
|
для: demonow
(28.02.2012 в 00:25)
| | >Кстате а на чем вы рисунки составляли?
Я в Visio. | |
|
|
|
|
|
|
|
для: cheops
(28.02.2012 в 00:19)
| | Все я понял, спасибо огромное всем, кто помог разобраться, это все дело было вызвано примером из книги, там рекурсивно дерево каталогов нужно вывести.Поэтому так важно четко знать смысл рекурсии.Кстате а на чем вы рисунки составляли? | |
|
|
|
|
|
|
|
для: demonow
(28.02.2012 в 00:15)
| | А вы вот так код запишите. Он не вызывает затруднений? Вот рекурсия тоже самое, только функция не 10 раз повторяется, а записывается кратко.
<?php
function recurs($b=10)
{
$h=0;
if($b==0) return;
echo "text<br>";
recurs1($b-1);
for($a=0;$a<5;$a++) $h++;
echo $h;
}
function recurs1($b)
{
$h=0;
if($b==0) return;
echo "text<br>";
recurs2($b-1);
for($a=0;$a<5;$a++) $h++;
echo $h;
}
...
function recurs8($b)
{
$h=0;
if($b==0) return;
echo "text<br>";
recurs9($b-1);
for($a=0;$a<5;$a++) $h++;
echo $h;
}
function recurs9($b)
{
$h=0;
if($b==0) return;
}
recurs();
?>
|
| |
|
|
|
|
|
|
|
для: demonow
(27.02.2012 в 23:35)
| | Примерно так и есть. Посмотрите еще картинку у Sfinks, тоже хорошая. Представьте, что функция вызывает не себя, а какую-то другую функцию с другим названием - она же просто дождется когда она выполниться и пойдет выполнять оставшийся код. Тут тоже самое, только экземпляров функции 10 штук. | |
|
|
|
|
|
|
|
для: Sfinks
(28.02.2012 в 00:08)
| | Ну да, я где-то так и думал просто проблема была с пониманием обратного хода функции. | |
|
|
|
|
|
|
|
для: Valick
(28.02.2012 в 00:02)
| | Тоесть когда $b==0, то это касается всех $b в каждой копии выше поэтому они возвращаются и выполняется цикл, так чтоль? | |
|
|
|
|
 21.1 Кб |
|
|
для: demonow
(27.02.2012 в 23:38)
| | Может вам на моем рисунке понятнее будет? На нем каждый прямоугольник - это функция. Я только глубину сократил, не стал все 10 рисовать. | |
|
|
|
|
|
|
|
для: demonow
(27.02.2012 в 23:56)
| | угу, а с чего ему быть другим? вы ведь только отнимаете по единице | |
|
|
|
|
|
|
|
для: Valick
(27.02.2012 в 23:52)
| | но ведь, функция будет возвращатся на этаж вверх если будет выполнятся условия $b=0; так ведь, так что получается это выражения ($b=0)тянется до самого верха пока не вернет в основную программу? | |
|
|
|
|
|
|
|
для: demonow
(27.02.2012 в 23:38)
| | Черт)))
не я белый и пушистый :))
просто поймите каждый возврат из функции возвращается на строчку ниже вызова самой функции
а рекурсия делает с столько копий функции самой себя, сколько позволяет логика скрипта
и из последней вложенной функции возврат не может произойти в основной скрипт, возврат происходит в предыдущую копию этой функции, где и выполняется остаток функции и так до самого верха
грубо говоря спускаясь вниз с 10 этажа на первый нужно проверить закрыта ли дверь на этаже и вымыть пол на лестничной клетке, но пережде чем вымыть пол нужно проверить закрыта ли дверь этажом ниже и так до первого этажа где двери вообще нет..
проверили? только, вы не сможете попасть обратно сразу на 10, вам придется подниматься и мыть полы на каждом этаже :) | |
|
|
|
|