Здравствуйте профессор, у меня возник маленький вопрос, как наша функция понимает что нужно присвоить b именно большую цифру а не малую ,чтобы считать модуль
Все четыре случая также решаются циклическим алгоритмом. Кода будет немного больше, но эффективность за счет экономии ресурсов - в разы выше. Как насчёт алгоритмов поиска кратчайшего пути на карте, перебора дерева (посчитать размер папки на диске по размерам файлов в этой папке и всех подчиненных подпапках). А ещё можно рисовать фракталы - как визуальная рекурсия.
интересно как реализовать проверку типа вводимого данного с клавиатуры? например если на клавиатуре нажали букву f, то это должно обрабатываться отдельно и выдавать сообщение, что факториал для букв не считается
11:50 маленький хак это написать !n При n=0 (If(n==0) - звучит на языке машины: "Если True" ) Если n не = 0 (if(n==0) :"Если False") Если там Flase то ничего не происходит если True то происходит. Если при n=0 написать if(n) то для машины это (Если Flase) если же там другое число то (Если True) А знак "!" меняет True и False местами
Два return в функции вычисления факториала не являются нарушением парадигмы структурного программирования? Тут получается, что функция имеет два выхода
Вот никак не ожидал, что Вы на факториале не начнете про тернарник рассказывать! Он же тут красив (в С) и уместен семантически (в данном случае): int factorial(int n) { return n ? n * factorial(n - 1) : 1; }
Ну... у меня же не Code Golg. :-) Мне важно дать рекурсивные алгоритмы однородно - чтобы дошло где крайний, где рекуррентный случаи. Вообще рекурсию + тернарный можно было бы обсудить с точки зрения ленивости вычислений. Потому что, если бы Си не был "ленив", вычисления с тернарным таки привели бы к бесконечной рекурсии без крайнего случая. Ещё раз спасибо за ваши комментарии, Александр Ом. Вы у меня прямо как бета-тестер. :-)
@@tkhirianov объясните, пожалуйста, как функция fast_power по параметрам понимает, что a нужно именно возводить в степень n, а не делить (a на n) или умножать (a на n) и др.?
Где-то лучше где-то, без рекурсии бывает даже медленнее или запарное. Если бы рекурсия была не нужна, ее бы исключили, и тогда целиком компьютер проще сжечь
Может быть с точки зрения читабельности программы рекурсия и хороша, но для железа это задница т.к. расходуется громадное количество ресурсов памяти под стек для сохранения параметров отложенных вложенных рекурсивных функций (другими словами - засерается память(стек) адресами возврата и сохраненными другими регистрами). В цикле же, например, в случае факториала, будет использовано всего несколько байт под переменные. Соответственно и скорость выполнения будет тоже в разы отличаться.
Что за бред? под стек выделено 4 мегабайта памяти, если ты умудришься и их израсходовать, то ты не программист что то явно делаешь не так, руки пообрубать будет проще.
Это программирование для школьников до меня только дошло! База!! АААааа!!!! Ну я и дэбил!!! Мне надо повторить нормально все. Просто очень все криво было... в башке и вообще..... Так что да... С этим СИ все равно будешь вечным школьником. Так что нормал!!!!!! Вспомнил школьную тупую шутку - ФРЕДИ ДАУН!! Посреди урока тупость сказать.... Незнаю почему так...
Просто гениальное объяснение с репой. Только сейчас понял, что всегда доходим до крайнего случая и вверх по стеку!
Дед зовёт деда дед зовёт деда дед зовёт деда
дед съел деда...
и здесь политика
@@Ryskatel XD
Очень, очень доступно поясняете! Прелестно просто!
Спасибо Вам огромное! Лучший преподаватель и профессионал!
Замечательное видео. Спасибо Вам.
Я уже ставлю лайк до просмотра
Ты супер сенсе😊
очень классное
объяснение! спасибо!
Здравствуйте профессор, у меня возник маленький вопрос, как наша функция понимает что нужно присвоить b именно большую цифру а не малую ,чтобы считать модуль
иногда сложно,но все-таки большое спасибо
стоит пересмотреть и самому напечатать, тогда более менее уляжется инфа. Она очень крутая!
Все четыре случая также решаются циклическим алгоритмом. Кода будет немного больше, но эффективность за счет экономии ресурсов - в разы выше.
Как насчёт алгоритмов поиска кратчайшего пути на карте, перебора дерева (посчитать размер папки на диске по размерам файлов в этой папке и всех подчиненных подпапках).
А ещё можно рисовать фракталы - как визуальная рекурсия.
интересно как реализовать проверку типа вводимого данного с клавиатуры? например если на клавиатуре нажали букву f, то это должно обрабатываться отдельно и выдавать сообщение, что факториал для букв не считается
Спасибо Вам!
11:50 маленький хак это написать !n При n=0 (If(n==0) - звучит на языке машины: "Если True" )
Если n не = 0 (if(n==0) :"Если False")
Если там Flase то ничего не происходит если True то происходит.
Если при n=0 написать if(n) то для машины это (Если Flase) если же там другое число то (Если True) А знак "!" меняет True и False местами
Спасибо большое)
Дед зовет деда - звучит как начало неплохой вечеринки.
0 дизлайков вот пример хорошего учителя
oops
Два return в функции вычисления факториала не являются нарушением парадигмы структурного программирования? Тут получается, что функция имеет два выхода
Условие отделяет return
Салам всем ба(н)ссейнистам
Все классно, но как работает расчет числа Фибоначчи, не дошло до меня пока.
Топ
Тимофей самый крутой!
Вот никак не ожидал, что Вы на факториале не начнете про тернарник рассказывать! Он же тут красив (в С) и уместен семантически (в данном случае):
int factorial(int n) {
return n ? n * factorial(n - 1) : 1;
}
Ну... у меня же не Code Golg. :-)
Мне важно дать рекурсивные алгоритмы однородно - чтобы дошло где крайний, где рекуррентный случаи.
Вообще рекурсию + тернарный можно было бы обсудить с точки зрения ленивости вычислений. Потому что, если бы Си не был "ленив", вычисления с тернарным таки привели бы к бесконечной рекурсии без крайнего случая.
Ещё раз спасибо за ваши комментарии, Александр Ом. Вы у меня прямо как бета-тестер. :-)
красиво )))
@@tkhirianov объясните, пожалуйста, как функция fast_power по параметрам понимает, что a нужно именно возводить в степень n, а не делить (a на n) или умножать (a на n) и др.?
@@Cabpca Там все операции явно прописаны - ни о чем догадываться не нужно.
a0
main (int argc, char* argv[ ] )Что это? Зачем? Почему не так main ()?
формальные аргументы функции, Антошка.
Для примеров рекурсии сойдёт, но при оптимизации всё лучше сделать без рекурсии. ИМХО
Где-то лучше где-то, без рекурсии бывает даже медленнее или запарное. Если бы рекурсия была не нужна, ее бы исключили, и тогда целиком компьютер проще сжечь
Может быть с точки зрения читабельности программы рекурсия и хороша, но для железа это задница т.к. расходуется громадное количество ресурсов памяти под стек для сохранения параметров отложенных вложенных рекурсивных функций (другими словами - засерается память(стек) адресами возврата и сохраненными другими регистрами). В цикле же, например, в случае факториала, будет использовано всего несколько байт под переменные. Соответственно и скорость выполнения будет тоже в разы отличаться.
Что за бред? под стек выделено 4 мегабайта памяти, если ты умудришься и их израсходовать, то ты не программист что то явно делаешь не так, руки пообрубать будет проще.
@@allex6829 А теперь то же на микроконтроллере где эта память даже не во всех в мегабайтах исчисляется, умник.
@@tanixtx5298 Так оставайся на своих микроконтроллерах, управляй отдельными битиками. Хэш функции, деревья, графы, красно черное дерево не для тебя.
В C# тоже знак присваивания это '=' , а знак равенства '=='.
ничего себе))
Вау
Включите на 0.5 будто с бодуна))
Бабка за деда, внучка за бабку, жучка за внучку, кошка за жучку, мышка за кошку => так мстит сицилийская мафия
Это программирование для школьников до меня только дошло! База!! АААааа!!!! Ну я и дэбил!!! Мне надо повторить нормально все. Просто очень все криво было... в башке и вообще..... Так что да... С этим СИ все равно будешь вечным школьником. Так что нормал!!!!!!
Вспомнил школьную тупую шутку - ФРЕДИ ДАУН!! Посреди урока тупость сказать.... Незнаю почему так...