Есть два типа людей: одни знают, что такое рекурсия, а другие думают, что есть два типа людей: одни знают, что такое рекурсия, а другие......... {error: out of memory)
@Кемаль-я9е4 жыл бұрын
Начал тему рекурсия на learn javascript, поймал жёсткий затуп и не понимал почему подставляется x * pow(x, n -1), потом в итоге допёрло что мы умпожаем X на X раз, а n -1 уменьшает количество попыток умножения. Спасибо за видео, среди всех что перебрал, в этом дошло до меня)
@2pizza5123 жыл бұрын
а ты мне поиог понять эту формулу)
@dlddlkpkp23123 жыл бұрын
уже полгода прошло. Как дела с учёбой? Каков прогресс?
@ggg-tq9be3 жыл бұрын
Хорошо, а теперь объясни что ты только что сказал, псих:))
@vanyg47862 ай бұрын
@@Кемаль-я9е брат ты доучился, работаешь? Если нет сколько учился суммарно
@glok05173 жыл бұрын
Сколько видео пересмотрел никак не мог понять. Но ты так объяснил подробно и разжеванно что меня наконец осенило как это работает Большое тебе человеческое СПАСИБО.
Спасибо большое за видео! 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 Жыл бұрын
Спасибо, уважаемый Михаил! Вы сделали концепцию рекурсии максимально доступной :)
@Ruslan_Saint_P3 жыл бұрын
function sum(num) { return num
@КонстантинКоролёв-ю3ш Жыл бұрын
Спасибо, мил человек.
@olegdegterov15955 ай бұрын
Коассное объяснение! Спасибо!
@Сергей-ю4ж2х Жыл бұрын
Спасибо! Отличное объяснение. Вот мой вариант: function recurseDivision(a) { if(a / 10 === 1) return 2 return (1 + recurseDivision(a / 10)) } Правда, код работает только в том случае, если в аргумент функции приходят только числа 10, 100, 1000 и т.д.
@nolightnohope33023 ай бұрын
спасибо за объяснение!
@etemax Жыл бұрын
отличное объяснение рекурсий, от души
@mr.zxzxzxz38162 жыл бұрын
отдуши душевно в душу!
@rustambokaev48864 жыл бұрын
Михаил, спасибо!
@mishanep4 жыл бұрын
Пожалуйста =)
@tazorprod.9342 жыл бұрын
Спасибо за видео. Доходчиво объяснили такую сложную тему.
@eghishemanukyan30212 жыл бұрын
наконец то я нашел то что я хотел спасибо огромное
@vladimirglazkov79602 жыл бұрын
Великолепная подача материала!
@ВикторияГолубова-щ1ы6 ай бұрын
function sumOfDigits(num) { if (num < 1) return 0 return 1 + sumOfDigits(num / 10) }
@krislichtschimmer90522 жыл бұрын
Спасибо! Очень четко и понятно!
@RCcubic Жыл бұрын
Сложная тема для меня. Каждый раз думаешь, что уж тут непонятного, но новая простейшая задача и затык на пол дня. Усугубляется еще и тем, что в реальности не используется, практика не нарабатывается. Мой простейший код с кучей букв: function sumOfDigit(number){ count = 0 if(number
@MaryGor_2 жыл бұрын
Спасибо! 💯❣Обожаю материалы, подкреплённые схемами/рисунками, к сожалению, не каждый так подробно опишет :) Стали понятнее более сложные примеры)
@АлександрБурдаков-с4ч2 жыл бұрын
Очень хорошее видео, благодаря вам я понял рекурсию. Лайк
@RinHaitani-oy7pj Жыл бұрын
Мой варик : let count = 0; function sumOfDigits(number) { let digits = number.toString(); if (count === digits.length) return 'done'; count++; return sumOfDigits(number); }
@VOZZZZZZZ11 ай бұрын
function sumOfDigits(number) { if (Math.abs(number) < 1) return 0; return 1 + sumOfDigits(number / 10); }
@siriusvelikolepniy5188 Жыл бұрын
спасибо, ваше видео очень мне помогло
@mavldr2 жыл бұрын
Круууто😮 спасибо большое ❤
@Vahe_111 Жыл бұрын
function sumDigits(number) { if (number < 10) { return number; } let last = number % 10; let num = Math.floor(number / 10); return last + sumDigits(num); }
@markmybeats3 жыл бұрын
чел... я не знаю, как тебя отблагодарить, это единственное объяснение, которое я отлично понял, господи, спасибо тебе
function sumOfDigits (num) { let i = 0; if (i === 0) return (''+num).length; return sumOfDigits () }
@topsstands98614 жыл бұрын
Немножко тут, немножко там. Каждый найдёт своего объеснятора, которого поймёт) Очень интересна тема карирования. + карирование с замыканием и рекурсией. Например, когда что-то подобное (3)(5)(4)(5) или (3)(5,6)(4). И самое главное где это в жизни используют?
@mishanep4 жыл бұрын
Карирование, действительно, интересная тема. Другой вопрос, что на реальных проектах этот подход часто используется через доп. библиотеки, чтобы не карировать всё самостоятельно. Есть отличная либа Ramda JS, а на хабре есть серия статей, как начать с ней работать (ибо карирование и всё, что с ним связано - это отдельный подход в программировании, т.н. функциональный, и многим поначалу он туго заходит, так как классическое образование подразумевает императивный/процедурный подход). Если интересно, вот первая из цикла статей, там есть ссылки на продолжения habr.com/ru/post/348868/
@topsstands98614 жыл бұрын
@@mishanep спасибо, ознакомлюсь)
@oleksandrearth60952 жыл бұрын
Спасибо! Вроде как разобрался let count = 0 function sumOfDigits(number) { if (isNaN(number) === false ) { count ++ } else { return console.log('Error') } if (Math.floor((number / 10))
@ОксанаПавлюк-т5с2 жыл бұрын
Оставлю свой вариант) let a = 0 function sumOfDigits(n){ if (n
@viktorpavlenko99492 жыл бұрын
округление то зачем тут?))
@КрістінаЛитвиненко-э6е2 жыл бұрын
Підскажіть, будь ласка, навіщо ми створюємо змінну а, і присвоюємо їй +1?
@ОлександрКовальчук-й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))
Мне кажется, это самый лучший урок по рекурсии, но можно я уточню момент: 1) // function pow (x, y){ // if(y
@mishanep4 жыл бұрын
Спасибо. Полагаю, это просто ошибка. Иногда, когда говоришь и что-то делаешь одновременно, подобное случается.
@irynabelaya81914 жыл бұрын
@@mishanep да нет, я к тому, что pow(x,n-1) и так 2 в степени n-1? зачем еще это выражение умножать на 2? 2*pow(x,n-1)
@dimeliora3 жыл бұрын
@@irynabelaya8191 вероятно, вы не до конца поняли суть рекурсивного процесса. Здесь вычисление результата начинается в самом конце, когда выполнится терминальное условие. Каждый рекурсивный вызов сродни изменению счётчика в обычном цикле. А данном примере мы реализуем возведение в степень, то есть, по сути, умножение числа на само себя n раз. Получается, что на каждом этапе мы как бы подвешиваем исходное число, дожидаясь результата последующего вызова. Всё сводится ожиданию той самой единички в конце. В итоге самая верхняя функция вернёт уже значение 1 и все вызванные до этого функции смогут осуществить свой return, получится такая цепочка:
@@dimeliora спасибо! после вашего комментария все стало понятно 👏🏻
@mariaruslit310 Жыл бұрын
после 17:53 не понятно...
@immOKDO2 жыл бұрын
Привет, я решил поставить на паузу и сам попробовал решить задачу с копией "Math.pow" и вот что у меня получилось: "return y
@andrew-ua3 жыл бұрын
каких X умноженное на 5 и - 2? и соответственно 5*5 ?? а как это получается что Х - это 5 * на 5 -2 - это 5*5 ??
@xOceanSpirit4 жыл бұрын
В видео не хватает объяснения в чем преимущества рекурсии перед обычной функцией? Возведение в степень можно ведь реализовать и в обычном цикле.
@jamsfarhatovna76512 жыл бұрын
нужнооо!!!
@JackSteamBoy Жыл бұрын
ты же тоже здесь потому что не мог понять как x умножается на функцию?) x умножается на функцию?) x умножается на функцию?) x умножается на функцию?) x умножается на функцию?)
@mamkindotker8 ай бұрын
я так и не понял почему они умножаются, где это условия задано.
@JackSteamBoy8 ай бұрын
@@mamkindotker в возврате
@alekseymakhov96562 жыл бұрын
const sum = num => num > 9 ? 1 + sum(num / 10) : 1
@rustyblade2647 Жыл бұрын
Нихера не понимаю почему при умножении х на функцию мы получаем степень
@andrTaylor2 жыл бұрын
Сделал свой вариант. 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))
@piter24503 жыл бұрын
сау брат
@sviatbondar17212 жыл бұрын
function countOfNumber(number) { return number < 10 ? 1 : 1 + countOfNumber(Math.floor(number / 10 )); } Вот такой получился
@АлександрСумский-к2б2 жыл бұрын
В этом уроке тема не раскрыта и разницы с циклом не видно
@АндрейСапонов-н4с2 жыл бұрын
на котятах понятнее.
@magomedmycaev70804 жыл бұрын
Я подписался. Хорошо объясняешь. Я так же на телеграмм канале @bofre нашел книги по JavaScript.
@ЛидияМакарьева-я7у2 жыл бұрын
Не доступно объясняете.. простите
@mishanep2 жыл бұрын
Рекурсия - тема не из простых. С первого раза почти никому не даётся. Попробуйте вернуться к ней через месяц. На самом деле она не так часто используется.
@tomanad83212 жыл бұрын
Хз, кто ты, но на learn js объяснили просто ужасно, а тебе спасибо
@logius843 жыл бұрын
нахрен мне твоя глобальная память??? Впустую потраченное время, бесишь тянуть время.... 5 минут в начале нужно пролистать. За тянулого времени отписка.
@SadBatya Жыл бұрын
решение задачи который выдали в конце видео function sumOfDigits(number){ return number.toString().length } console.log(sumOfDigits(094932))
@SadBatya Жыл бұрын
было бы круто написать с рекурсией, но я не могу понять как сделать и какое вставить условие
@rustyblade2647 Жыл бұрын
Рррррррррекурсия, сказала чао)
@ЕвгенийАлексеев-ъ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));
@MaksTrueman2 жыл бұрын
Эээм))) const sumOfDigits = num => num.toString().length или в условии обязательно нужна рекурсия?))))
@mishanep2 жыл бұрын
Обязательно)
@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