Что такое рекурсия. Фундаментальный JavaScript

  Рет қаралды 24,368

Михаил Непомнящий

Михаил Непомнящий

Күн бұрын

Пікірлер: 86
@pakoo7715
@pakoo7715 3 жыл бұрын
Есть два типа людей: одни знают, что такое рекурсия, а другие думают, что есть два типа людей: одни знают, что такое рекурсия, а другие......... {error: out of memory)
@Кемаль-я9е
@Кемаль-я9е 4 жыл бұрын
Начал тему рекурсия на learn javascript, поймал жёсткий затуп и не понимал почему подставляется x * pow(x, n -1), потом в итоге допёрло что мы умпожаем X на X раз, а n -1 уменьшает количество попыток умножения. Спасибо за видео, среди всех что перебрал, в этом дошло до меня)
@2pizza512
@2pizza512 3 жыл бұрын
а ты мне поиог понять эту формулу)
@dlddlkpkp2312
@dlddlkpkp2312 3 жыл бұрын
уже полгода прошло. Как дела с учёбой? Каков прогресс?
@ggg-tq9be
@ggg-tq9be 3 жыл бұрын
Хорошо, а теперь объясни что ты только что сказал, псих:))
@vanyg4786
@vanyg4786 2 ай бұрын
@@Кемаль-я9е брат ты доучился, работаешь? Если нет сколько учился суммарно
@glok0517
@glok0517 3 жыл бұрын
Сколько видео пересмотрел никак не мог понять. Но ты так объяснил подробно и разжеванно что меня наконец осенило как это работает Большое тебе человеческое СПАСИБО.
@Anonym-li8eb
@Anonym-li8eb Жыл бұрын
Спасибо за прекрасное объяснение! :) 1: const sumOfDigits = (n) => (n < 10 ? 1 : 1 + sumOfDigits(Math.floor(n / 10))); 2: const sumOfDigits = (n) => { if (n % 10 === n) return 1; return 1 + sumOfDigits(Math.floor(n / 10)); };
@castiellblissful
@castiellblissful 6 ай бұрын
Спасибо большое за видео! let count = 0; function sumOfDigits (string) { if (count == string.length) { return "finished" } count++; return sumOfDigits(string) } console.log (sumOfDigits(String('Hi!'))); console.log("your string has a length =", count) У меня получилось вот так. Метод String() использован на случай, если пользователь ввёдет число)
@corpse_obscur
@corpse_obscur Жыл бұрын
Спасибо, уважаемый Михаил! Вы сделали концепцию рекурсии максимально доступной :)
@Ruslan_Saint_P
@Ruslan_Saint_P 3 жыл бұрын
function sum(num) { return num
@КонстантинКоролёв-ю3ш
@КонстантинКоролёв-ю3ш Жыл бұрын
Спасибо, мил человек.
@olegdegterov1595
@olegdegterov1595 5 ай бұрын
Коассное объяснение! Спасибо!
@Сергей-ю4ж2х
@Сергей-ю4ж2х Жыл бұрын
Спасибо! Отличное объяснение. Вот мой вариант: function recurseDivision(a) { if(a / 10 === 1) return 2 return (1 + recurseDivision(a / 10)) } Правда, код работает только в том случае, если в аргумент функции приходят только числа 10, 100, 1000 и т.д.
@nolightnohope3302
@nolightnohope3302 3 ай бұрын
спасибо за объяснение!
@etemax
@etemax Жыл бұрын
отличное объяснение рекурсий, от души
@mr.zxzxzxz3816
@mr.zxzxzxz3816 2 жыл бұрын
отдуши душевно в душу!
@rustambokaev4886
@rustambokaev4886 4 жыл бұрын
Михаил, спасибо!
@mishanep
@mishanep 4 жыл бұрын
Пожалуйста =)
@tazorprod.934
@tazorprod.934 2 жыл бұрын
Спасибо за видео. Доходчиво объяснили такую сложную тему.
@eghishemanukyan3021
@eghishemanukyan3021 2 жыл бұрын
наконец то я нашел то что я хотел спасибо огромное
@vladimirglazkov7960
@vladimirglazkov7960 2 жыл бұрын
Великолепная подача материала!
@ВикторияГолубова-щ1ы
@ВикторияГолубова-щ1ы 6 ай бұрын
function sumOfDigits(num) { if (num < 1) return 0 return 1 + sumOfDigits(num / 10) }
@krislichtschimmer9052
@krislichtschimmer9052 2 жыл бұрын
Спасибо! Очень четко и понятно!
@RCcubic
@RCcubic Жыл бұрын
Сложная тема для меня. Каждый раз думаешь, что уж тут непонятного, но новая простейшая задача и затык на пол дня. Усугубляется еще и тем, что в реальности не используется, практика не нарабатывается. Мой простейший код с кучей букв: function sumOfDigit(number){ count = 0 if(number
@MaryGor_
@MaryGor_ 2 жыл бұрын
Спасибо! 💯❣Обожаю материалы, подкреплённые схемами/рисунками, к сожалению, не каждый так подробно опишет :) Стали понятнее более сложные примеры)
@АлександрБурдаков-с4ч
@АлександрБурдаков-с4ч 2 жыл бұрын
Очень хорошее видео, благодаря вам я понял рекурсию. Лайк
@RinHaitani-oy7pj
@RinHaitani-oy7pj Жыл бұрын
Мой варик : let count = 0; function sumOfDigits(number) { let digits = number.toString(); if (count === digits.length) return 'done'; count++; return sumOfDigits(number); }
@VOZZZZZZZ
@VOZZZZZZZ 11 ай бұрын
function sumOfDigits(number) { if (Math.abs(number) < 1) return 0; return 1 + sumOfDigits(number / 10); }
@siriusvelikolepniy5188
@siriusvelikolepniy5188 Жыл бұрын
спасибо, ваше видео очень мне помогло
@mavldr
@mavldr 2 жыл бұрын
Круууто😮 спасибо большое ❤
@Vahe_111
@Vahe_111 Жыл бұрын
function sumDigits(number) { if (number < 10) { return number; } let last = number % 10; let num = Math.floor(number / 10); return last + sumDigits(num); }
@markmybeats
@markmybeats 3 жыл бұрын
чел... я не знаю, как тебя отблагодарить, это единственное объяснение, которое я отлично понял, господи, спасибо тебе
@mishanep
@mishanep 3 жыл бұрын
Рад, что помогло =)
@ДмитроВячеславович
@ДмитроВячеславович 3 жыл бұрын
Круто, спасибо большое:)
@deorfeal5657
@deorfeal5657 3 жыл бұрын
Пасибо, друг!)
@dmitriystoyanov933
@dmitriystoyanov933 3 жыл бұрын
function sum(number) { if(number === 1) { return number } else { return 1 + sum(number / 10) } } console.log(sum(100))
@redalert7658
@redalert7658 3 жыл бұрын
не работает от 2 до 9))
@redalert7658
@redalert7658 3 жыл бұрын
function sum(number) { if(number
@tazorprod.934
@tazorprod.934 2 жыл бұрын
function sumOfDigits (num) { let i = 0; if (i === 0) return (''+num).length; return sumOfDigits () }
@topsstands9861
@topsstands9861 4 жыл бұрын
Немножко тут, немножко там. Каждый найдёт своего объеснятора, которого поймёт) Очень интересна тема карирования. + карирование с замыканием и рекурсией. Например, когда что-то подобное (3)(5)(4)(5) или (3)(5,6)(4). И самое главное где это в жизни используют?
@mishanep
@mishanep 4 жыл бұрын
Карирование, действительно, интересная тема. Другой вопрос, что на реальных проектах этот подход часто используется через доп. библиотеки, чтобы не карировать всё самостоятельно. Есть отличная либа Ramda JS, а на хабре есть серия статей, как начать с ней работать (ибо карирование и всё, что с ним связано - это отдельный подход в программировании, т.н. функциональный, и многим поначалу он туго заходит, так как классическое образование подразумевает императивный/процедурный подход). Если интересно, вот первая из цикла статей, там есть ссылки на продолжения habr.com/ru/post/348868/
@topsstands9861
@topsstands9861 4 жыл бұрын
@@mishanep спасибо, ознакомлюсь)
@oleksandrearth6095
@oleksandrearth6095 2 жыл бұрын
Спасибо! Вроде как разобрался let count = 0 function sumOfDigits(number) { if (isNaN(number) === false ) { count ++ } else { return console.log('Error') } if (Math.floor((number / 10))
@ОксанаПавлюк-т5с
@ОксанаПавлюк-т5с 2 жыл бұрын
Оставлю свой вариант) let a = 0 function sumOfDigits(n){ if (n
@viktorpavlenko9949
@viktorpavlenko9949 2 жыл бұрын
округление то зачем тут?))
@КрістінаЛитвиненко-э6е
@КрістінаЛитвиненко-э6е 2 жыл бұрын
Підскажіть, будь ласка, навіщо ми створюємо змінну а, і присвоюємо їй +1?
@ОлександрКовальчук-й9е
@ОлександрКовальчук-й9е 2 жыл бұрын
​@@КрістінаЛитвиненко-э6е це поганий приклад, так як викликати функцію в консолі кілька разів, то результат буде поганий. типу console.log( sumOfDigits(12)); console.log( sumOfDigits(12222)) змінну потрібно створювати в середині функції. ось для прикладу function numberLengRecursion(num){ let count = 1; if(num / 10 > 1){ return 1 + numberLengRecursion(num/10); } else { return 1; } } console.log(numberLengRecursion(250)) console.log(numberLengRecursion(25000))
@Ekaterina-tu7ou
@Ekaterina-tu7ou 3 жыл бұрын
Спасибо!
@asmodeus7862
@asmodeus7862 Жыл бұрын
function sum(number) { if(number < 10) { return 1 } else { return 1 + sum(number / 10) } } console.log(sum(567489)); // 6
@garry2412
@garry2412 3 жыл бұрын
спасибо!
@irynabelaya8191
@irynabelaya8191 4 жыл бұрын
Мне кажется, это самый лучший урок по рекурсии, но можно я уточню момент: 1) // function pow (x, y){ // if(y
@mishanep
@mishanep 4 жыл бұрын
Спасибо. Полагаю, это просто ошибка. Иногда, когда говоришь и что-то делаешь одновременно, подобное случается.
@irynabelaya8191
@irynabelaya8191 4 жыл бұрын
​@@mishanep да нет, я к тому, что pow(x,n-1) и так 2 в степени n-1? зачем еще это выражение умножать на 2? 2*pow(x,n-1)
@dimeliora
@dimeliora 3 жыл бұрын
@@irynabelaya8191 вероятно, вы не до конца поняли суть рекурсивного процесса. Здесь вычисление результата начинается в самом конце, когда выполнится терминальное условие. Каждый рекурсивный вызов сродни изменению счётчика в обычном цикле. А данном примере мы реализуем возведение в степень, то есть, по сути, умножение числа на само себя n раз. Получается, что на каждом этапе мы как бы подвешиваем исходное число, дожидаясь результата последующего вызова. Всё сводится ожиданию той самой единички в конце. В итоге самая верхняя функция вернёт уже значение 1 и все вызванные до этого функции смогут осуществить свой return, получится такая цепочка:
@irynabelaya8191
@irynabelaya8191 3 жыл бұрын
@@dimeliora Супер-объяснение!!! Разобралась! Спасибо огромное!!!
@ОльгаВасилевська-ф6ч
@ОльгаВасилевська-ф6ч 3 жыл бұрын
@@dimeliora спасибо! после вашего комментария все стало понятно 👏🏻
@mariaruslit310
@mariaruslit310 Жыл бұрын
после 17:53 не понятно...
@immOKDO
@immOKDO 2 жыл бұрын
Привет, я решил поставить на паузу и сам попробовал решить задачу с копией "Math.pow" и вот что у меня получилось: "return y
@andrew-ua
@andrew-ua 3 жыл бұрын
каких X умноженное на 5 и - 2? и соответственно 5*5 ?? а как это получается что Х - это 5 * на 5 -2 - это 5*5 ??
@xOceanSpirit
@xOceanSpirit 4 жыл бұрын
В видео не хватает объяснения в чем преимущества рекурсии перед обычной функцией? Возведение в степень можно ведь реализовать и в обычном цикле.
@jamsfarhatovna7651
@jamsfarhatovna7651 2 жыл бұрын
нужнооо!!!
@JackSteamBoy
@JackSteamBoy Жыл бұрын
ты же тоже здесь потому что не мог понять как x умножается на функцию?) x умножается на функцию?) x умножается на функцию?) x умножается на функцию?) x умножается на функцию?)
@mamkindotker
@mamkindotker 8 ай бұрын
я так и не понял почему они умножаются, где это условия задано.
@JackSteamBoy
@JackSteamBoy 8 ай бұрын
@@mamkindotker в возврате
@alekseymakhov9656
@alekseymakhov9656 2 жыл бұрын
const sum = num => num > 9 ? 1 + sum(num / 10) : 1
@rustyblade2647
@rustyblade2647 Жыл бұрын
Нихера не понимаю почему при умножении х на функцию мы получаем степень
@andrTaylor
@andrTaylor 2 жыл бұрын
Сделал свой вариант. x ^ 0 чекает является ли число целым. Как только оно вещественным становится после деления на 10 - получаем (например 0.5) то выходим с цикла рекурсивного и далее у нас сложение единиц идёт подряд - от последней до самой первой. function sumOfDigits(x: number): number { if ((x ^ 0 ) !== x) return 0 return 1 + sumOfDigits(x / 10) } console.log(sumOfDigits(1000))
@piter2450
@piter2450 3 жыл бұрын
сау брат
@sviatbondar1721
@sviatbondar1721 2 жыл бұрын
function countOfNumber(number) { return number < 10 ? 1 : 1 + countOfNumber(Math.floor(number / 10 )); } Вот такой получился
@АлександрСумский-к2б
@АлександрСумский-к2б 2 жыл бұрын
В этом уроке тема не раскрыта и разницы с циклом не видно
@АндрейСапонов-н4с
@АндрейСапонов-н4с 2 жыл бұрын
на котятах понятнее.
@magomedmycaev7080
@magomedmycaev7080 4 жыл бұрын
Я подписался. Хорошо объясняешь. Я так же на телеграмм канале @bofre нашел книги по JavaScript.
@ЛидияМакарьева-я7у
@ЛидияМакарьева-я7у 2 жыл бұрын
Не доступно объясняете.. простите
@mishanep
@mishanep 2 жыл бұрын
Рекурсия - тема не из простых. С первого раза почти никому не даётся. Попробуйте вернуться к ней через месяц. На самом деле она не так часто используется.
@tomanad8321
@tomanad8321 2 жыл бұрын
Хз, кто ты, но на learn js объяснили просто ужасно, а тебе спасибо
@logius84
@logius84 3 жыл бұрын
нахрен мне твоя глобальная память??? Впустую потраченное время, бесишь тянуть время.... 5 минут в начале нужно пролистать. За тянулого времени отписка.
@SadBatya
@SadBatya Жыл бұрын
решение задачи который выдали в конце видео function sumOfDigits(number){ return number.toString().length } console.log(sumOfDigits(094932))
@SadBatya
@SadBatya Жыл бұрын
было бы круто написать с рекурсией, но я не могу понять как сделать и какое вставить условие
@rustyblade2647
@rustyblade2647 Жыл бұрын
Рррррррррекурсия, сказала чао)
@ЕвгенийАлексеев-ъ9ъ
@ЕвгенийАлексеев-ъ9ъ Жыл бұрын
let count = 0 const sumOfDigits = (num) => { if (typeof num !== 'number') { return 'не число'; } if (num < 1) { return count; } count++; return sumOfDigits(num / 10); }; console.log(sumOfDigits(9000));
@MaksTrueman
@MaksTrueman 2 жыл бұрын
Эээм))) const sumOfDigits = num => num.toString().length или в условии обязательно нужна рекурсия?))))
@mishanep
@mishanep 2 жыл бұрын
Обязательно)
@n3trnnr
@n3trnnr Жыл бұрын
У меня тоже сразу же идея преобразовать число в строку) Получился такой вариант: let result: number = 0 const sum = (number: any) => { const nLength = number.toString() if (nLength.length === 0) { return false } result += 1 const remainder = nLength.slice(1) sum(remainder) } sum(1000)//4
Замыкания в JavaScript с примерами. Фундаментальный JavaScript
22:39
Что такое промисы в JavaScript. Фундаментальный JavaScript
24:51
Михаил Непомнящий
Рет қаралды 46 М.
ТЮРЕМЩИК В БОКСЕ! #shorts
00:58
HARD_MMA
Рет қаралды 2,7 МЛН
From Small To Giant 0%🍫 VS 100%🍫 #katebrush #shorts #gummy
00:19
Players push long pins through a cardboard box attempting to pop the balloon!
00:31
Алгоритмы на javascript. Стек и рекурсия.
11:47
Сергей Константинов
Рет қаралды 7 М.
Каррирование в JavaScript
16:14
Веб-разработка - DevMagazine
Рет қаралды 9 М.
Рекурсия в Javascript. Цикл без цикла
16:30
Александр Дудукало
Рет қаралды 4,4 М.
ТЮРЕМЩИК В БОКСЕ! #shorts
00:58
HARD_MMA
Рет қаралды 2,7 МЛН