Рекурсивные функции в PHP | Базовый курс PHP-7

แชร์
ฝัง
  • เผยแพร่เมื่อ 28 ส.ค. 2024
  • Рекурсия - это вызов функции самой себя. Пример рекурсивной функции мы разберем сегодня на простом и сложном задании.
    Используем рекурсивную функцию на примере факториала, а потом напишем решение без рекурсии используя цикл!
    ДОМАШНЕЕ ЗАДАНИЕ:
    drive.google.c...

ความคิดเห็น • 43

  • @Atikan37
    @Atikan37 6 หลายเดือนก่อน

    Спасибо большое 😊

  • @user-wm1ix7ox9t
    @user-wm1ix7ox9t 3 ปีที่แล้ว +1

    Про рекурсии очень хорошо объясняется в уроках курса "C# Starter 2013" на сайте ITVDN. Ты не объяснил того что попадая на рекурсию мы попадаем не в туже самую функцию а в её 'копию' , а после завершения последней копии функции завершая предыдущие копии функции мы возвращаемся обратно по адресам возврата к оригинальной функции для её завершения. Потому нельзя делать бесконечную рекурсию - будет заполнен стек. В общем кому интересно может глянуть

    • @shyma_grasious
      @shyma_grasious 3 ปีที่แล้ว +1

      вот поэтому использую цикл вайл вместо рекурсии)

    • @haminidzinanusubalieva6622
      @haminidzinanusubalieva6622 2 ปีที่แล้ว +1

      ну раз там лучше обясняют, здесь то что делаешь

  • @Petrov1ch1011
    @Petrov1ch1011 3 ปีที่แล้ว +1

    Отличный курс!

  • @aleksandrsh3893
    @aleksandrsh3893 11 หลายเดือนก่อน

    Отличный курс, Спасибо
    код дз с лекцией

  • @Make_25
    @Make_25 ปีที่แล้ว +2

    Я который перехожу в 8 класс уже работаю с факториалом, помню как в 5 классе я изучал python и там было тема про дискриминант и квадратные уравнение на секунду на помню это вообще тема 8 класса потом прихожу к репетитору и узнаю что я все знаю это было для меня так легко то что D = B^2 *4aс 😎 если че это не мой ак

    • @chumbuzzy4694
      @chumbuzzy4694 10 หลายเดือนก่อน

      И как успехи сейчас? Это вообще классно, что так рано увлекся этим

  • @Anvar_Batalov
    @Anvar_Batalov ปีที่แล้ว +1

    Благодарю!

  • @almaz9776
    @almaz9776 4 ปีที่แล้ว +4

    Классное видео ,спасибо.
    А можно вопрос? будет уроки про БД?

  • @user-du6ns4ww6o
    @user-du6ns4ww6o 4 ปีที่แล้ว +2

    Честно функции с foreach проще чем factorial($num - 1) просто потому что не понятно что происходит.

  • @shyma_grasious
    @shyma_grasious 3 ปีที่แล้ว

    я вот пробовал в рекурсии но цикл вайл мне удобней и понятней, да и с точки зрения переполнения стека - безопаснее). Поэтому использую условие остановки цикла прямо в его условии для имитации рекурсии

    • @arshakmuradyan543
      @arshakmuradyan543 2 ปีที่แล้ว

      иногда удобнее использовать рекурсию

  • @LesoVitek
    @LesoVitek ปีที่แล้ว +1

    //Уменьшение числа до 100
    function doSotki($num){
    if($num>100){
    echo $num . "";
    $num-=5;
    doSotki($num);
    }else return;
    }
    doSotki(200);

    // Задача со *. Создаем 3-хмерный массив
    $arr = ['animal'=>['horse'=>['name'=>'Гриша',
    'color'=>'Гнедой',
    'sex'=>'Конь',
    'age'=>'12',
    ],
    'cat'=>['name'=>'Васька',
    'color'=>'Рыжий',
    'sex'=>'Кот',
    'age'=>'7',
    ],
    'dog'=>['name'=>'Кузьма',
    'color'=>'Белый',
    'sex'=>'Кобель',
    'age'=>'5',
    ],
    ],
    'plant'=>['tomat'=>['name'=>'Бычье сердце',
    'color'=>'Розовый',
    'size'=>'Огромный',
    'type'=>'Тепличный',
    ],
    'cucumber'=>['name'=>'Отелло',
    'color'=>'Зеленый',
    'size'=>'Небольшой',
    'type'=>'Тепличный',
    ],
    'potato'=>['name'=>'Синеглазка',
    'color'=>'Фиолетовый',
    'size'=>'Средний',
    'type'=>'Открытый грунт',
    ],
    ],
    ];
    function recArray(...$arr){
    foreach($arr as $key => $val){
    if(is_array($val)) { // Проверка на вложенный массив
    echo "Массив $key содержит: ";
    recArray(...$val);
    }else {
    echo $key . " - " . $val . "";
    }
    }
    }
    recArray(...$arr);

  • @developerno1820
    @developerno1820 2 ปีที่แล้ว +7

    Для тех кто не справился с дз:
    ПРАКТИКА:
    function recurse($num){
    if($num > 100){
    echo ($num-=5) . "";
    recurse($num);
    }else return;
    }
    recurse(200);
    ЗАДАЧА СО *
    $massiv = [
    "Friends" => ["Petya", "Lena", "Yura"],
    "Comrades" => ["Anya", "Katya", "Pasha"],
    "Relatives" => ["Sasha", "Vasya", "Zhora"]
    ];
    function recarray($arr) {
    foreach($arr as $key => $value) {
    if(!is_array($value)) echo $value . "";
    recarray($value);
    }
    }
    recarray($massiv);

    • @Kenny_buzz
      @Kenny_buzz 2 ปีที่แล้ว

      а где тут рекурсия в задании 2?

    • @developerno1820
      @developerno1820 2 ปีที่แล้ว

      @@Kenny_buzz функция вызывается внутри функции, а это и есть рекурсивная функция

    • @Kenny_buzz
      @Kenny_buzz 2 ปีที่แล้ว

      @@developerno1820 ну да, точно

    • @nurlannadzhavov1054
      @nurlannadzhavov1054 2 ปีที่แล้ว

      Спасибо со второй задачей, целый день ломал голову, что и как делать, постоянно ошибку выводил.

    • @user-lm1oe9lx2x
      @user-lm1oe9lx2x 2 ปีที่แล้ว +1

      Для передачи аргумента в функцию только в качестве массива можно переписать код в стиле if else:
      if(!is_array($value)){
      echo $value . "";
      } else {
      recarray($value);
      }

  • @user-mm7wv6zg8e
    @user-mm7wv6zg8e 4 ปีที่แล้ว

    Супер!! Спасибо! :)

  • @sreggh
    @sreggh 3 ปีที่แล้ว

    спасибо за видео!

  • @Kenny_buzz
    @Kenny_buzz 2 ปีที่แล้ว +1

    Спасибо. Тут как-то уже чувствуется беспомощность с второй задачей, нифига не понятно как это сотворить и какой это должно иметь вид

    • @andrievskii
      @andrievskii  2 ปีที่แล้ว +2

      Это сложная тема, просто пропускайте и идите далее, в нужное время придет понимание

    • @Kenny_buzz
      @Kenny_buzz 2 ปีที่แล้ว

      @@andrievskii окей. Спасибо за совет;)

  • @user-oe7jf2vf5k
    @user-oe7jf2vf5k 4 ปีที่แล้ว

    спасибо за такой курс

  • @2009Evgenia
    @2009Evgenia ปีที่แล้ว

    Рекурсивные функции могут потребовать много оперативной памяти. Лучше заменить циклами: расчёт и запись в переменную, которая занимает мало памяти, расчёт и запись в переменную. А как работают рекурсивные функции? Там, возможно, под все переменные всех вызванных функций отводится место в оперативной памяти. Хотя, кто знает, может, есть какая-то оптимизация кода.

  • @kabukijoe99
    @kabukijoe99 3 ปีที่แล้ว

    спасибо помогло.

  • @contactplus100
    @contactplus100 2 ปีที่แล้ว

    👍

  • @solong4347
    @solong4347 4 ปีที่แล้ว +1

    Доброго времени суток. У меня вопрос, может поможете. Учу основы синтаксис пхп, ооп немного месяца 4. Вроде примерно материал понял, но как работать с проектами, как их создавать пока не ясно. Может подскажите, что следует ещё выучить , знать или быть может планируете видео снять на эту тему. Заранее спасибо за ответ.

    • @user-fo1hk1ds3b
      @user-fo1hk1ds3b 2 ปีที่แล้ว +3

      год прошёл. Ну и что выяснил?

    • @Marketing_top
      @Marketing_top ปีที่แล้ว +2

      @@user-fo1hk1ds3b 2 года прошло, ну что выяснил?

    • @user-wh8nf6up8s
      @user-wh8nf6up8s 6 หลายเดือนก่อน

      @@Marketing_top 3 года прошло, что удалось выяснить?

    • @user-qt7dp5vs8c
      @user-qt7dp5vs8c 3 หลายเดือนก่อน

      ​@@user-wh8nf6up8s пишу роботов ии, создаю вселенные

  • @romanchubich2013
    @romanchubich2013 4 ปีที่แล้ว

    Полчаса жаждал узнать в чём же преимущество и зачем это нужно.:) (Шутка) На самом деле я хотел узнать, как получить из рекурсии данные без глобальной переменной.=)

  • @IamLickurG
    @IamLickurG 3 ปีที่แล้ว

    А с каких пор 1 не целое число?

    • @andrievskii
      @andrievskii  3 ปีที่แล้ว

      Все зависит в каком типе данных этот 1 хранится

  • @VETaL855
    @VETaL855 3 ปีที่แล้ว +2

    ПОМОГИТЕ С ЗАДАЧЕЙ СО *

    • @sreggh
      @sreggh 3 ปีที่แล้ว +5

      /*Создайте многомерный массив или используйте с прошлых занятий готовый
      Напишите рекурсивную функцию обхода этого массива с выводом его элементов*/
      $aray = array( // создал в функции массив (хотя нужно, чтобы массив был вне функции, но я не заморачивался, главное - чтобы сама функция работала)
      'nicuk' => 'Nicky',
      'niceek' => 'Nickqe',
      'joy' => array('weight' => 20, 'nane' => 'Joy','family' => 'Fox'),
      'tom' => array('weight' => 30, 'nane' => 'Tom','family' => 'Nix'),
      'nick' => 'Nick'
      );
      function foo5($eee){ // создал функцию
      foreach ($eee as $key => $value) { // создал цикл, который разбивает массив на ключ ($key) и значение ($value)
      if (is_array($eee)) // написал условие1: если $array является массивом, то мы выполняем нижеследующее условие
      {
      if (is_array($key)) // условие1: если $key (которая у нас раньше уже приняла значение ключа (через foreach) является массивом), то выполняется условие2
      {
      foreach ($key as $keys => $valure) // условие2: цикл разбивает $key на ключ ($keys) и значение ($valure)
      print_r ($keys); // и выводит их как ключ и значение и между ними двоеточие
      echo " : ";
      print_r ($valure);
      echo '';
      foo5(); // а потом все возвращается в начало функции
      }else { // сработает, если условие2 false
      print_r ($key);
      echo " : ";
      print_r ($value);
      echo '';
      }
      } }
      }
      foo5($aray); //вывели функцию
      // думаю еще можно косметически подправить, но смысл задания был не в этом :)

    • @user-fo1hk1ds3b
      @user-fo1hk1ds3b 2 ปีที่แล้ว +1

      @@sreggh
      твой код но более красиво написан. До этого все задания со звёздочками за 10 минут делал, но тут впервые впал в ступор не понимая зачем тут рекурсия и как перебирать строковые елементы масива без форич

    • @chronofagt
      @chronofagt 2 ปีที่แล้ว +1

      @@sreggh Спасибо большое за пример, всё сидел и думал, но ничего кроме банального перебора через форич не приходило в голову, а этот код отлично залетел)

    • @aizerbox123
      @aizerbox123 ปีที่แล้ว

      @@sreggh ты молодец.