Про рекурсии очень хорошо объясняется в уроках курса "C# Starter 2013" на сайте ITVDN. Ты не объяснил того что попадая на рекурсию мы попадаем не в туже самую функцию а в её 'копию' , а после завершения последней копии функции завершая предыдущие копии функции мы возвращаемся обратно по адресам возврата к оригинальной функции для её завершения. Потому нельзя делать бесконечную рекурсию - будет заполнен стек. В общем кому интересно может глянуть
я вот пробовал в рекурсии но цикл вайл мне удобней и понятней, да и с точки зрения переполнения стека - безопаснее). Поэтому использую условие остановки цикла прямо в его условии для имитации рекурсии
Доброго времени суток. У меня вопрос, может поможете. Учу основы синтаксис пхп, ооп немного месяца 4. Вроде примерно материал понял, но как работать с проектами, как их создавать пока не ясно. Может подскажите, что следует ещё выучить , знать или быть может планируете видео снять на эту тему. Заранее спасибо за ответ.
Я который перехожу в 8 класс уже работаю с факториалом, помню как в 5 классе я изучал python и там было тема про дискриминант и квадратные уравнение на секунду на помню это вообще тема 8 класса потом прихожу к репетитору и узнаю что я все знаю это было для меня так легко то что D = B^2 *4aс 😎 если че это не мой ак
Рекурсивные функции могут потребовать много оперативной памяти. Лучше заменить циклами: расчёт и запись в переменную, которая занимает мало памяти, расчёт и запись в переменную. А как работают рекурсивные функции? Там, возможно, под все переменные всех вызванных функций отводится место в оперативной памяти. Хотя, кто знает, может, есть какая-то оптимизация кода.
Для передачи аргумента в функцию только в качестве массива можно переписать код в стиле if else: if(!is_array($value)){ echo $value . ""; } else { recarray($value); }
Полчаса жаждал узнать в чём же преимущество и зачем это нужно.:) (Шутка) На самом деле я хотел узнать, как получить из рекурсии данные без глобальной переменной.=)
/*Создайте многомерный массив или используйте с прошлых занятий готовый Напишите рекурсивную функцию обхода этого массива с выводом его элементов*/ $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); //вывели функцию // думаю еще можно косметически подправить, но смысл задания был не в этом :)
@@sreggh твой код но более красиво написан. До этого все задания со звёздочками за 10 минут делал, но тут впервые впал в ступор не понимая зачем тут рекурсия и как перебирать строковые елементы масива без форич
@@sreggh Спасибо большое за пример, всё сидел и думал, но ничего кроме банального перебора через форич не приходило в голову, а этот код отлично залетел)
Спасибо большое 😊
Отличный курс!
Благодарю!
Про рекурсии очень хорошо объясняется в уроках курса "C# Starter 2013" на сайте ITVDN. Ты не объяснил того что попадая на рекурсию мы попадаем не в туже самую функцию а в её 'копию' , а после завершения последней копии функции завершая предыдущие копии функции мы возвращаемся обратно по адресам возврата к оригинальной функции для её завершения. Потому нельзя делать бесконечную рекурсию - будет заполнен стек. В общем кому интересно может глянуть
вот поэтому использую цикл вайл вместо рекурсии)
ну раз там лучше обясняют, здесь то что делаешь
Супер!! Спасибо! :)
спасибо за видео!
спасибо за такой курс
Классное видео ,спасибо.
А можно вопрос? будет уроки про БД?
Да будут!
я вот пробовал в рекурсии но цикл вайл мне удобней и понятней, да и с точки зрения переполнения стека - безопаснее). Поэтому использую условие остановки цикла прямо в его условии для имитации рекурсии
иногда удобнее использовать рекурсию
Доброго времени суток. У меня вопрос, может поможете. Учу основы синтаксис пхп, ооп немного месяца 4. Вроде примерно материал понял, но как работать с проектами, как их создавать пока не ясно. Может подскажите, что следует ещё выучить , знать или быть может планируете видео снять на эту тему. Заранее спасибо за ответ.
год прошёл. Ну и что выяснил?
@@ДавидПоляруш-д4ь 2 года прошло, ну что выяснил?
@@Marketing_top 3 года прошло, что удалось выяснить?
@@Ланченсо пишу роботов ии, создаю вселенные
спасибо помогло.
Я который перехожу в 8 класс уже работаю с факториалом, помню как в 5 классе я изучал python и там было тема про дискриминант и квадратные уравнение на секунду на помню это вообще тема 8 класса потом прихожу к репетитору и узнаю что я все знаю это было для меня так легко то что D = B^2 *4aс 😎 если че это не мой ак
И как успехи сейчас? Это вообще классно, что так рано увлекся этим
Рекурсивные функции могут потребовать много оперативной памяти. Лучше заменить циклами: расчёт и запись в переменную, которая занимает мало памяти, расчёт и запись в переменную. А как работают рекурсивные функции? Там, возможно, под все переменные всех вызванных функций отводится место в оперативной памяти. Хотя, кто знает, может, есть какая-то оптимизация кода.
Для тех кто не справился с дз:
ПРАКТИКА:
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);
а где тут рекурсия в задании 2?
@@Kenny_buzz функция вызывается внутри функции, а это и есть рекурсивная функция
@@developerno1820 ну да, точно
Спасибо со второй задачей, целый день ломал голову, что и как делать, постоянно ошибку выводил.
Для передачи аргумента в функцию только в качестве массива можно переписать код в стиле if else:
if(!is_array($value)){
echo $value . "";
} else {
recarray($value);
}
Спасибо. Тут как-то уже чувствуется беспомощность с второй задачей, нифига не понятно как это сотворить и какой это должно иметь вид
Это сложная тема, просто пропускайте и идите далее, в нужное время придет понимание
@@andrievskii окей. Спасибо за совет;)
Честно функции с foreach проще чем factorial($num - 1) просто потому что не понятно что происходит.
Полчаса жаждал узнать в чём же преимущество и зачем это нужно.:) (Шутка) На самом деле я хотел узнать, как получить из рекурсии данные без глобальной переменной.=)
ПОМОГИТЕ С ЗАДАЧЕЙ СО *
/*Создайте многомерный массив или используйте с прошлых занятий готовый
Напишите рекурсивную функцию обхода этого массива с выводом его элементов*/
$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); //вывели функцию
// думаю еще можно косметически подправить, но смысл задания был не в этом :)
@@sreggh
твой код но более красиво написан. До этого все задания со звёздочками за 10 минут делал, но тут впервые впал в ступор не понимая зачем тут рекурсия и как перебирать строковые елементы масива без форич
@@sreggh Спасибо большое за пример, всё сидел и думал, но ничего кроме банального перебора через форич не приходило в голову, а этот код отлично залетел)
@@sreggh ты молодец.
//Уменьшение числа до 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);
Отличный курс, Спасибо
код дз с лекцией