PHP уроки
ПРОСТО самая лучшая обучалка PHP!
  • Студия LPHPRU
  • Уроки PHP
  • Контакты
  • Помощь
Меню
  • PHP - с чего начать?
  • Уроки PHP
  • Функции PHP
  • Массивы
  • Denwer
  • MySQL
  • Информация
  • Dreamweaver уроки
  • JQuery уроки
  • Галерея
  • OpenCart
Календарь
Февраль (2023)
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728     
В продаже

  • Что нового?

    • Тест №2
    • Тест №1 для разработчиков
    • PHP 5.6 RC1
    • SQL. Как cкопировать данные одной колонки в другую, в той же таблице
    • GRUB изменить порядок загрузки OS в Linux
    • SSH - вход на сервер без ввода пароля
    • PhpMyAdmin - проблема с загрузкой большого файла на сервер
  • Комментарии

    • Hello
    • тут нечего не понятно
    • Может уже пора на WebStorm переходит...
    • Здравствуйте. 10 лет пользуюсь др...
    • Была такая проблема, решалась пе...
  • TOP-5

    • Метод POST (2945468 )
    • Привет, МИР! (910791 )
    • Метод GET (667156 )
    • Операторы (605670 )
    • Firefox уже запущен, но не отвечает... (352940 )

Рекурсия. Рекурсивный метод вызова функций.

Главная» Array » Рекурсия. Рекурсивный метод вызова функций.
PHP урок № 50
Рекурсия
Реку́рсия — метод определения класса объектов или методов предварительным заданием одного или нескольких (обычно простых) его базовых случаев или методов, а затем заданием на их основе правила построения определяемого класса, ссылающегося прямо или косвенно на эти базовые случаи.

Другими словами, рекурсия — способ общего определения объекта или действия через себя, с использованием ранее заданных частных определений. Рекурсия используется, когда можно выделить самоподобие задачи.


Википидея
Скажу для тех, кому некогда. Принцип рекурсивного вызова функции заключается в том, что она вызывает сама себя и всё.
Теперь подробнее кому нескучно.
Листинг № - Листинг 1. Пример рекурсии, примитивный пример.
<?php

  
function recurs()
  {
      
recurs();
  }
   
?> 
Так эта функция будет работать до бесконечности, вызывая сама себя и больше ничего не делая при этом. Для того чтобы избавится от ненужного бесконечного вызова, надо прописать условие при котором эта функция вызывала бы сама себя. В классическом исполнение хорошо подходит пример функции вычисляющей факториал числа.
Факториал - произведение всех целых чисел, меньших или равных данному числу.
Возьмем число 3, его факториал вычисляется так 3х2х1, в результате факториал числа 3 равен 6.
Листинг № - Листинг 2. Функция вычисляет факториал числа с помощью рекурсивного метода.
<?php


function factory($n)
{
   if(!
$n)
   {
      return(
"Факториал числа $n не существует.");
   }
   else
   {
      if(
$n <= 1){return 1;}
      return 
$n * factory($n-1); // здесь происходит повторный вызов функции
   
}

}

echo 
factory(5);  // 120
?> 
                                
                                
Факториал числа так же можно вычислить, применив цикл, полностью заменяющий рекурсию.
Листинг № - Листинг 3. Вычисление факториала числа с помощью цикла, не используя рекурсивный метод.
<?php


function factory($n)
{
   if(!
$n)
   {
      return(
"Факториал числа $n не существует.");
   }
   else
   {
       
$result = 1;
       for(
$i=1; $i <= $n; $i++)
       {
           
$result *= $i;
       }
       return 
$result;
   }

}

echo 
factory(6); // 720

?> 
В данном примере представлено два варианта решения одной задачи. С точки зрения элегантности исполнения рекурсия выглядит стабильно на высоте. Но циклический метод решения, оставляет за собой право быть первым по эффективности исполнения и наглядности алгоритма, причём во много раз.
Рекурсивный обход массива
Факториал это конечно хорошо, но куда его приложить, вот ума не приложу. Вот полезное решение для обхода многомерного массива. Ну очень нужный вариант в копилку знаний программиста.
<?php
 
function recurs($w){
        if(
is_array($w)){
            foreach(
$w as $str){
                
$e .=  recurs($str);
            }
            return 
$e;
        } else {
            return 
$w;    
        }
    }
    
$w = array(array(2,2,2,2,2),3,3,3,array(1,1,array(0,0,0,0,0),1,1));    
echo     
recurs($w);
?>
// 22222333110000011
Урок закончен.
SETTER © LPHP.RU
Администрация сайта
Array
  • lphp.ru © 2009-2023