Рекурсия. Факториал числа c++ рекурсивно. Рекурсия факториал. Рекурсивный алгоритм факториал. #44

Поділитися
Вставка
  • Опубліковано 25 гру 2024

КОМЕНТАРІ • 505

  • @SimpleCodeIT
    @SimpleCodeIT  7 років тому +494

    Забыл сказать, что рекурсивный алгоритм нахождения факториала - одно из возможных заданий которое вам могут дать на собеседовании! =)

    • @Firuz26
      @Firuz26 7 років тому +10

      Спасибо

    • @garp_tv4849
      @garp_tv4849 7 років тому +28

      факториал нуля это же единица? или как

    • @garp_tv4849
      @garp_tv4849 7 років тому +5

      #include
      #include
      using namespace std;
      int fack(int a)
      {
      if (a < 0)
      {
      cout

    • @nicholasdev1853
      @nicholasdev1853 7 років тому +1

      Отличный пример.

    • @РоманЧерножуков-ы2и
      @РоманЧерножуков-ы2и 7 років тому +8

      Скажите пожалуйста в чём отличие рекурсии от цикла? Ведь в цикле тоже можно организовать вычисление факториала или любой другой последовательности? Заранее спасибо

  • @ЕвгенийДьячков-о5в
    @ЕвгенийДьячков-о5в 6 років тому +344

    if(видео крутое)
    {
    поставить лайк;
    }

    • @voltamper96
      @voltamper96 6 років тому +13

      cout

    • @ДаниилЪ-б2з
      @ДаниилЪ-б2з 6 років тому +11

      int a = 100500;
      for (int i = 0; i < a; i++)
      {
      for (int j = 0; j < a; j++)
      {
      cout

    • @kuhubun
      @kuhubun 5 років тому +6

      @@MrGray-rk9zu вы уверены?

    • @Fakem1ner
      @Fakem1ner 3 роки тому +2

      else
      {
      Тоже поставить лайк;
      }

    • @ВіталійДяків
      @ВіталійДяків 5 місяців тому

      круглые скобки забыл, ведь жто должно быть функцией. А не переменной

  • @sorokanews5019
    @sorokanews5019 7 років тому +144

    Отличный канал от самых азов до...
    З.Ы. По общепринятому соглашению 0!=1 ;)

  • @АртёмГуртиков-х9ч
    @АртёмГуртиков-х9ч 4 роки тому +50

    Самое лучшее объяснение на свете по поводу рекурсии, красава Серёг, всех благ тебе !!!

  • @МаринаЗиновьева-п5ы
    @МаринаЗиновьева-п5ы 3 роки тому +194

    Небольшая опечатка:
    0! = 1
    Поэтому код функции Fact должен быть таким:
    int Fact (int N)
    {
    if (N == 0 || N == 1)
    return 1;
    return N * Fact (N-1);
    }

    • @dimbo4ka213
      @dimbo4ka213 2 роки тому +3

      лучше написать if (n == 0) - код красивее будет, асимптотика не поменяется

    • @poetluchnik0v
      @poetluchnik0v Рік тому

      Если 0 тогда return 0, если 1 return - 1 у него.

    • @НиколайСериков-17
      @НиколайСериков-17 Рік тому

      Луше && вместо ||

    • @intice257
      @intice257 Рік тому +12

      @@НиколайСериков-17 N не может одновременно принимать 2 значения.

    • @ResidentialReels
      @ResidentialReels Рік тому +3

      ​@@НиколайСериков-17 && - войдет в тело if если два условие будут равны. N (переменная с урока) не будет 0 и 1 одновременно.

  • @gditbrbitw
    @gditbrbitw 3 роки тому +15

    меня прямо на улыбку тянет, когда понимаю как всё это работает, особенно когда потом написал это, проверил в отладчике. Просто слов нет. Спасибо большое

  • @Куся-ч9я
    @Куся-ч9я 3 роки тому +13

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

  • @Avram_Vitalik
    @Avram_Vitalik 4 роки тому +73

    "если вы не смотрели предыдущих урока то вам лучше этого не видеть "
    Я посмотрел все)))) И мой Мозг всеравно взорвался)))))
    Но что такое рекурсия я понял, спасибо))

  • @magnum6808
    @magnum6808 4 роки тому +23

    Спасибо большое, Сергей. Вы очень доходчиво объясняете тему. Уже давно понял, что вместо лекций 70 летних пердунов по программированию, которые очень скучно и нехотя объясняют материал, нужно смотреть вас. Они пытаются донести материал так, как будто мы уже до этого все знали и это просто повторение, постоянно спешат, бубнят. Короче, после лекции отбивается желание вообще заниматься программированием. А вы молодец. Так держать!

  • @FelixSamulevich
    @FelixSamulevich Рік тому +1

    Огромный титанический труд .Редкость в эфире всякой мути.

  • @rajinthunderkeg5005
    @rajinthunderkeg5005 6 років тому +84

    Для тех, кто не знает, зачем и для чего нужна рекурсия и будет ли возможность столкнуться с ней в реальном проекте.
    Начнём с того, что в реальных проектах в 90% случаях вам вообще не придётся работать с математикой, а если и будете, то для этого у вас в арсенале будет
    какой-нибудь фреймворк.
    Саму рекурсию используют для каких-либо вычислений, но также эти же вычисления можно реализовать с помощью цикла. Правда, в некоторых случаях(с которыми
    вы, вероятнее всего, редко будете сталкиваться) удобнее использовать рекурсию за счёт её простоты реализации. Но стоит помнить, что используя рекурсию, вы рискуете
    получить провал стека, который привод к падению вашего приложения.
    Итог: Рекурсия - просто, но с риском. Цикл - просто, либо сложно, НО без риска получить крах всего приложения.

    • @Литературоведы-з4у
      @Литературоведы-з4у 4 роки тому +2

      То есть, рекурсию можно и никогда и не использовать?

    • @АуеШпак
      @АуеШпак 4 роки тому

      @@Литературоведы-з4у, можно, но нужно

    • @GrishOK1993
      @GrishOK1993 3 роки тому +1

      по моему рекурсию надо удалить вообще.

    • @vitaliivynnyk9642
      @vitaliivynnyk9642 3 роки тому

      @@GrishOK1993 напиши без рекурсии алгоритмы той же сортировки к примеру сложности меньше n^2 и скажи нужна она или нет

    • @GrishOK1993
      @GrishOK1993 3 роки тому +1

      @@vitaliivynnyk9642 Спасибо)) - крутая тема на первый взгляд в сортировке, я даже не думал что за пять минут увижу так много вариантов сортировки в инете)) - буду разберется если время позволит)

  • @ДаніелаРак
    @ДаніелаРак 11 місяців тому +1

    дуже доступно і зрозуміло, виконала ще декілька задач згенерованих ШІ і закріпила зання.

  • @mr.warpunch6007
    @mr.warpunch6007 3 роки тому +3

    Чётко и по делу, в общем как всегда, спасибо за видеоролик, за 10 минут изложили всю суть как это делается, а потом еще очень разжевано объяснили принцип работы, слёту лайк!!!

  • @user-qe7md6tb5l
    @user-qe7md6tb5l 3 роки тому +125

    Чтобы понять рекурсию,нужно сначала понять рекурсию(Конфуцый)

    • @justuser2463
      @justuser2463 2 роки тому +18

      * начал активно рекурсивно думать *
      ...начинаю изучать рекурсию -> чтобы ее понять, надо ее изучить -> начинаю изучать рекурсию -> чтобы ее понять, надо ее изучить...
      void learnRecursive()
      {
      return learnRecursive();
      }

    • @antoniopripizduchi858
      @antoniopripizduchi858 2 роки тому +2

      @@justuser2463 почему void функция что-то возвращает?)

    • @ruslandad365
      @ruslandad365 2 роки тому +10

      @@justuser2463 У Меня случилось переполнение стека в мозгу)

    • @АлалпоаоааАооууооклк
      @АлалпоаоааАооууооклк 9 місяців тому

      ​@@ruslandad365А надо было всего сделать условие выхода ой ой йойойоой!
      Программа мозга упала полагаю!?

    • @pilipzero1149
      @pilipzero1149 4 місяці тому

      ​@@justuser2463рекурсия изучения рекурсии

  • @753bc9
    @753bc9 Рік тому +1

    Пришёл сюда из плейлиста по C#, чтобы поподробнее изучить данную тему. Очень доходчиво разъяснено. Большое спасибо!
    Не пойму людей, которые ставят дизы на такие информативные и понятные видосы. Если это из-за несущественной в данной ситуации погрешности в виде 0! = 0, то таким людям не угодить. Суть видео совсем не в этом.

    • @Empty_line
      @Empty_line Рік тому

      Скажите пожалуйста почему N сразу не умножается на (N - 1) а только потом когда все закончилось?

    • @753bc9
      @753bc9 Рік тому

      @@Empty_line потому что до возврата результата умножения функция Fact вызывает сама себя ещё раз. Если бы сразу произошло умножение и функция вернула его результат, то она (функция Fact) уже не вызвала бы себя и никакой рекурсии не было. После возврата результата функцией любой код, который следует строками ниже return, не будет выполняться. Можете даже попробовать с чем-нибудь простым. Напишите функцию, которая выполняет результат сложения двух чисел, а ниже (имеется в виду в теле этой же функции) ещё какой-нибудь код. Visual Studio вам даже затемнит этот код, подсказывая, что он недостижим, а потому и не выполнится. То же самое и здесь

    • @Empty_line
      @Empty_line Рік тому

      Я не понял что ты написал,это связано со стеком?или что?

    • @753bc9
      @753bc9 Рік тому +1

      @@Empty_line посмотри, где N умножается на N-1. Причём не просто на N-1, а Fact(N - 1), т.е. функция сама себя ещё раз вызывает. Это всё происходит в return. Ты знаешь, что делает оператор return? Он завершает выполнение функции и возвращает управление вызывающей функции. Но прикол в том, что в данном случае в нём же (в return) снова вызывается эта же функция, но только с уменьшенным на единицу N. Поэтому return пока что не завершает выполнение функции и ещё не возвращает управление вызывающей функции. Сначала обязана вызваться функция Fact(N - 1). Поэтому сразу и не происходит умножения N на N-1. Если бы return проигнорировал Fact(N - 1), то функция не вызвала бы сама себя и никакой рекурсии не было бы.

    • @Empty_line
      @Empty_line Рік тому +1

      ​@@753bc9 Спустя время я понял что к чему спасибо тебе ты всё понятно изложил😊

  • @АртёмМаксудов-ш9ц
    @АртёмМаксудов-ш9ц 4 роки тому +1

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

  • @highlander1531
    @highlander1531 5 років тому +2

    Oдин из немногих случаев когда я получил огромное удовольствие от урока. Спасибо

  • @spaceshuttle5066
    @spaceshuttle5066 4 роки тому +2

    Наиподробнейший разбор, которого я ни у кого не видел. Спасибо!

  • @gditbrbitw
    @gditbrbitw 3 роки тому +4

    благодаря этому факториалу еще больше понял суть работы рекурсии. Спасибо большое

  • @guts6755
    @guts6755 4 роки тому +5

    Очень интересная и в то же время сложная тема! Спасибо за ваш урок все понял вы лучший!

  • @ДмитрийОсипов-х1ф
    @ДмитрийОсипов-х1ф 7 років тому +13

    * Самые понятные, видео уроки по c++, на всём (RU) youtube *

  • @shaphrol9896
    @shaphrol9896 2 роки тому +2

    Таки и алгебру выучу. Очень хорошее объяснение! Автор не поленился заморочиться с рисунками. А они помогли понять! Респект✓!

    • @_xiliam_7708
      @_xiliam_7708 11 місяців тому

      ну он тут ошибся как минимум в супер простой вещи "Факториал"

  • @lehasamarsky2002
    @lehasamarsky2002 2 роки тому +3

    Великолепные уроки! Огромное спасибо!

  • @АлалпоаоааАооууооклк
    @АлалпоаоааАооууооклк 9 місяців тому +1

    Разобрал по полочкам и все прям найс!
    Понимание этого на деле просто!
    Ну если конечно не углубляться в тонкости работы этого всего (одного только стэка) Но щас этого более чем хватает!

  • @ВячеславБондаренко-м2и

    чем больше смотришь видео, тем больше хочется смотреть дальше. затягивает как сериал))) у нас сейчас в компьютерной академии закончился курс ООП и начинается С#. мы всей группой надеемся что у вас скоро появятся обучающие ролики по этому языку. очень-очень ждем. спасибо за ваш труд!

    • @vitusink6445
      @vitusink6445 5 років тому +1

      Люди реально этот примитив изучают в вузах?!

    • @TheWladberlin
      @TheWladberlin 5 років тому +6

      @@vitusink6445 Какой примитив? А как надо? Не от простого к сложному, а сразу "Перельман"?

    • @vitusink6445
      @vitusink6445 5 років тому

      @@TheWladberlin Я как бы думал что в вузах посложнее задачи...

    • @levaackerman4837
      @levaackerman4837 Рік тому

      @@vitusink6445 2023 ничего не изменилось

  • @АлексейМохров-е9н
    @АлексейМохров-е9н 5 років тому +18

    без рекурсии
    int N;
    int fac=1;
    cout N;

    for (int i = N; i >= 1; i--)
    {
    fac = fac * i;
    }
    cout

    • @zikohasanov7112
      @zikohasanov7112 3 роки тому

      вот то что я искал, спасибо вам огромное🤝

  • @ВорВзаконе-ф5б
    @ВорВзаконе-ф5б 6 років тому +3

    Вы очень хорошо объяснили такую непростую тему, с первого раза конечно дошло, но я пересмотрю еще раз для лучшего усвоения материала)

  • @Ms001man
    @Ms001man 6 років тому +1

    Спасибо за урок! Реально, чел, ты крут! Не только знаешь своё дело, но и умеешь объяснить другим!

  • @highlander1531
    @highlander1531 5 років тому +2

    Так было интересно что я слушал урок как хороший детектив:-) Спасибо Вам еще раз

  • @karenjantv2302
    @karenjantv2302 3 роки тому +2

    У меня получилось это сделать самому, чему я очень рад, правда лишнюю переменную сделал. Спасибо вам большое за ваши уроки!)

  • @Salvator701
    @Salvator701 5 років тому +1

    Ха, самое интересно что благодаря 2-ум предыдущим урокам ( про стеки и рекурсии ) , я перед тем как смотреть видео
    решил сам написать код , который будет искать факториал.
    После потного часика все-таки написал САМ не смотрев видео!
    Спасибо вам больше за труды, подача настолько понятное, что ну вообще вопросов не остается!
    С меня донатик с первой ЗП, хех)
    P.S
    вот код кому интересно.
    int FACT(int a)
    {
    if (a > 1)
    {
    a = a - 1;
    return a * FACT(a);
    }
    else
    {
    return a;
    }
    }
    int factorial(int a)
    {
    if (a > 1)
    {
    a = a * FACT(a);
    }
    return a;
    }
    int main ()
    {
    int a = factorial(3);
    cout

    • @Salvator701
      @Salvator701 5 років тому

      Прочел комменты, и узнал что факториал 0 = 1 .
      Тогда необходимо в функцию factorial добавить проверку -
      if ( a == 0 )
      {
      return a+1;
      }

  • @КатяЛевонюк-м6н
    @КатяЛевонюк-м6н 4 роки тому +2

    Очень круто и все ясно. Спасибо вам за ваш труд. Это очень ценно!!!!

  • @АюрОчиров-л7ж
    @АюрОчиров-л7ж 5 років тому +1

    У вас классные уроки!) Все сразу становится просто и понятно)
    Задонатил 100 руб в качестве благодарности за ваш труд, ваши уроки бесценны)
    Спасибо Вам!)

    • @vitusink6445
      @vitusink6445 5 років тому +4

      Ваши уроки бесценны но не дороже 100 руб :)))

  • @ilya_dikushnikov
    @ilya_dikushnikov 3 роки тому +1

    Матрешка
    Очень хороший пример для понимания работы рекурсии

  • @SeshAlex
    @SeshAlex 6 років тому +2

    Спасибо! Хоть голова от этих факториалов и квадратная:)))

  • @blackgolddev4023
    @blackgolddev4023 5 років тому +1

    Вы лучший даже в книгах такого нет

  • @jareniiric
    @jareniiric 11 місяців тому

    спасибо вам за урок очень подробно обьяснили и разжевали это для нас спасибо

  • @СергейЯкимчук-ы9я
    @СергейЯкимчук-ы9я 7 років тому +48

    Факториал нуля равен единице. А при обобщении факториала гамма-функцией можно вычислить факториал отрицательных чисел.

    • @darvlinig3872
      @darvlinig3872 6 років тому +1

      Аналогично

    • @ilia_meysak
      @ilia_meysak 6 років тому +3

      Нет, факториал отрицательных целых чисел вычислять нельзя, т.к. именно в них гамма-функция имеет разрывы. А на всей оставшейся комплексной плоскости эта функция определена збс.

    • @igorosadchuk1030
      @igorosadchuk1030 6 років тому +1

      вычислить факториал отрицательных чисел нельзя. Гамма-функция там стремится в + или - бесконечность. Но у гамма-фунции существует аналитическое продолжение где она определена в комплексной плоскости. К стати гамма-функция существует для нецелых значений, и что интересно можно посчитать факториал дробных чисел.

    • @loading99error.55
      @loading99error.55 5 років тому +1

      гамма функция вычисляет также и дробные значения факториала.

    • @nikitawhite4516
      @nikitawhite4516 5 років тому +5

      @@ilia_meysak страшные слова, пологаю, нецензурные

  • @АртемЖуков-п7ш
    @АртемЖуков-п7ш 3 роки тому

    Спасибо. "Разжевал" так, что даже мой кот понял )
    Единственное, что вместо 2-х if использовать 1 ( сути никак не меняет)
    int fact (int n)
    {
    if (n > 1) {
    return n = n * fact(n - 1);
    }
    return n;
    }

  • @barabucho
    @barabucho 6 років тому +1

    ОФИГИТЕЛЬНО! ГРОМАДНОЕ СПАСИБО!

  • @ВладиславФедун
    @ВладиславФедун 6 років тому +8

    Да, спасибо)
    SimpleCode one love

  • @Ermine882
    @Ermine882 7 років тому +4

    Очередное спасибо.

  • @archiechellaut9483
    @archiechellaut9483 3 роки тому

    Спасибо большое за урок, Сергей!

  • @My-Raped-Soul
    @My-Raped-Soul 6 років тому

    Спасибо тебе большое за твои уроки!!

  • @ДимДимыч-ц1в
    @ДимДимыч-ц1в 3 роки тому +3

    Факториал числа это произведение чисел от 1 до N! включительно. 7!=1*2*3*4*5*6*7
    1:49 - Что необходимо для вычисления факториала числа 2 ?
    4:24 - Вычисляем факториал числа
    5:06 - Формула факториала числа
    5:49 - Условие выхода из цикла
    6:45 - Вызов функции вычисления факториала числа
    7:55 - Проверяем работу функции отладчиком

  • @yegorpo2043
    @yegorpo2043 7 років тому +5

    Отличные уроки, спасибо

  • @МихаилМосолов-ш5л
    @МихаилМосолов-ш5л 3 роки тому

    Все гениальное просто. А вот мой вариант:
    int foo(int n, int N=1)
    {
    N *= n*(n-1);
    if (n - 1 == 1)
    {
    return N;
    }
    n-=2;
    return foo(n, N);
    }

  • @vladimirdiadichev6140
    @vladimirdiadichev6140 7 років тому +4

    Просто и доходчиво и очень наглядно, спасибо!

  • @havemerc
    @havemerc 4 роки тому

    Лучшие уроки по с++ в ру сегменте

  • @Mykhailo-r6h
    @Mykhailo-r6h 3 роки тому

    Оххх, спасибо! Вроде всё понял, пойду-ка напишу пару рекурсивных функций!

  • @SimpleCodeIT
    @SimpleCodeIT  7 років тому +6

    #факториал #рекурсия #SimpleCode #урокипрограммирования

  • @zaeu
    @zaeu 6 років тому

    Я только сейчас узнал что такое Факториал и как он работает , до этого вообще не знал что это такое , мне 23 ))) Спасибо!

  • @sanekkolesnik4990
    @sanekkolesnik4990 3 роки тому

    Огромное спасибо,я начал чучуть понимать рекурсию до этого я не понимал что это)

  • @bat_bsv
    @bat_bsv 5 років тому +13

    5!=1*2*3*4*5 так в школе учили.

  • @ЯнаБабичева-е8ь
    @ЯнаБабичева-е8ь 3 роки тому

    Спасибо, как всегда просто супер!!!

  • @АлинаПетрова-н6я
    @АлинаПетрова-н6я 2 роки тому

    Спасибо спасибо спасииибо вам огромное!!!!Сразу понятен стал смысл рекурсии, а то препод что-то набубнил быстро-быстро такую довольно специфическую тему, и все, разбирайтесь сами😒

  • @max4urs
    @max4urs 3 роки тому

    4 раза пересмотрел )) потом понял)) спасибо огромное!

  • @ЖаннаБелецкая-ж7э
    @ЖаннаБелецкая-ж7э 2 роки тому

    Спасибо за ваш труд!

  • @АртёмПичкур-о4с
    @АртёмПичкур-о4с 3 роки тому

    if(N == 0)
    return 0;
    Не нужно это, я без него запускаю и всё работает, ибо после слова return функция останавливается, ещё с питона знаю. А так курс чёткий, моё уважение).

  • @sanekvelikiy
    @sanekvelikiy 2 роки тому

    Очень понятно объяснил ,спасибо автору

  • @АлександрШейка-ц5ь
    @АлександрШейка-ц5ь 4 роки тому +1

    Практическое применение рекурсии используется при обходе древовидных структур с заранее не известным количеством ветвей. Например файловая система компьютера или парсинг xml документа.

  • @МаксимХоменко-з2э
    @МаксимХоменко-з2э 5 років тому +1

    Спасибо, очень все понятно и просто)

  • @book_riot
    @book_riot 9 місяців тому

    Я поняла! Супер пример. Спасибо!

    • @lstarbox3765
      @lstarbox3765 9 днів тому

      как успехи?

    • @book_riot
      @book_riot 5 днів тому

      @ работаю разрабом ))

  • @marlonbrando458
    @marlonbrando458 4 роки тому +1

    Очень крутое объяснение, лайк!

  • @Slime191
    @Slime191 6 років тому +1

    Круто объяснил, всё понял, спасибо

  • @timurortskhanov8527
    @timurortskhanov8527 6 років тому +2

    Спасибо за уроки

  • @timurortskhanov8527
    @timurortskhanov8527 6 років тому +1

    Спасибо за урок.

  • @artdevh3735
    @artdevh3735 Рік тому +2

    Нашел на одном форуме может кому будет полезно: Просто всё дело в том что факториал имеет более глубокое комбинаторное значение, то есть это не просто некое произведение, а количество перестановок множества из n элементов. Например, элементы множества {A,B,C,D} можно линейно упорядочить 4!=24 способами. А вот множество из нуля элементов, имеет по определению один НУЛЕВОЙ эллемент, поэтому и перестановка там только одна. Хотя и множество из одного эллемента тоже имеет один - ненулевой эллемент, поэтому она там тоже одна. зы Я с матфака

  • @GrishOK1993
    @GrishOK1993 3 роки тому +3

    Гениально)) я факториал сделал без проверок 0 и 1))
    Минимум операций))
    int fact(int x)
    {
    int proiz(1); int i(1);
    while(i

    • @waqs6533
      @waqs6533 2 роки тому

      откуда вы такие гении беретесь а?

  • @TyurinAlexey
    @TyurinAlexey 5 років тому +1

    Спасибо тебе большое!!!

  • @olehorenchuk1792
    @olehorenchuk1792 4 роки тому

    Круто обьясняеш. Полудше чем лектор

  • @polmesh2057
    @polmesh2057 Рік тому

    Благодарю. Прекоастное

    • @Empty_line
      @Empty_line Рік тому

      Почему умножение выполняется только потом? почему не сразу?

    • @viktorthyganchuk8710
      @viktorthyganchuk8710 10 місяців тому

      @@Empty_line потому что не хватает результата функции

  • @TGrod
    @TGrod 4 роки тому

    Я сделал немного подругому, но с добавлением переменной i (итерация). У вас безусловно решение лучше) Может если бы знал про формулу, то решил бы так же. Но её я не знал и решал, так сказать, через своё понимание)
    #include
    using namespace std;
    int fc(int i, int n = 1)
    {
    if (i < 1)
    {
    return n;
    }
    n *= i;
    return fc (--i, n);
    }
    int main()
    {
    cout

  • @massage_Pavel_karakol
    @massage_Pavel_karakol 10 місяців тому

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

  • @artemtorkit6286
    @artemtorkit6286 3 роки тому

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

  • @mazdai14
    @mazdai14 9 місяців тому

    Спасибо!

  • @meeba-dev
    @meeba-dev 5 років тому

    if (n < 2) return 1; Функция вызывает саму себя, до тех пор, пока аргумент не подходит под условие выхода из функции. В то время, пока функция вызывает саму себя (уменьшается значение аргумента). Как аргумент подошел к значению в условии выхода из функции - в этот момент самая глубокая функция получает возвращаемую единицу (можно считать это первой вычисленной функцией). После этого начинается обратный процесс, умножение результата функции на аргумент, который постепенно увеличивается (до начального значения).

  • @lmrbzv
    @lmrbzv 4 роки тому

    Без рекурсии:
    int Fact(int N)
    {
    int result = 1;
    for (int i = 1; i < N; i++)
    {
    result *= i;
    }
    return result;
    }

  • @ВиталийСусский-я2м
    @ВиталийСусский-я2м 4 роки тому +4

    cout

    • @Kawabatushka
      @Kawabatushka 3 роки тому +6

      Ниче не хочу сказать, но вы кавычки потеряли...
      Да и setlocale неплохо бы прописать, чтоб вместо букв краказябры не выдало😄😅

  • @X6Mpower
    @X6Mpower 2 роки тому +3

    Так как мы хорошие студенты, после рекурсии сам для себя вычислил факториал через for:
    int Fact(int N) {
    int fact=1;
    for (int i = 1; i

  • @saladgg4501
    @saladgg4501 Рік тому +1

    Для матеши пригодится :D факториалы вычислять

  • @xrustik4948
    @xrustik4948 7 років тому +33

    Мой мозг, окочательно сломан....

    • @loading99error.55
      @loading99error.55 5 років тому +2

      просто математическое толкование факториала здесь дано сильно криво. n! = 1*2*3*.....*n

    • @hotabmax6431
      @hotabmax6431 4 роки тому +4

      @@loading99error.55 Не криво, а математически точно.

  • @amd3s
    @amd3s 7 років тому +5

    Спасибо за урок, и объяснение алгоритма!
    Вопрос для моего понимания при попытке вычислить факторил числа больше 17, мы получаем отрицательное значение. Насколько я понимаю это связано с типом используемой переменной int которая не может поместить данное значение?
    Какой самый большой тип хранения целых чисел мы можем использовать ?
    cout

    • @SimpleCodeIT
      @SimpleCodeIT  7 років тому +5

      Это переполнение данных. unsigned long long int максимальный тип для целых беззнаковых чисел. Если нужно ещё больше то уже нужно смотреть в сторону библиотек с реализацией чего - то типа BigInteger. У меня такой необходимости не возникало, так что более точно не скажу.

    • @amd3s
      @amd3s 7 років тому

      #SimpleCode спасибо

  • @КонстантинМедведев-ы5у

    N! = 1*2*3* ... *(N-1)*N по определению, а 0! = 1 просто по соглашению, так как это помогает записывать в общем виде некоторые выражения, не оговаривая отдельно нулевой случай(например, биномиальные коэффициенты или количество выборок из n по k)

    • @maksimgapey574
      @maksimgapey574 4 роки тому

      с высшей математики должно быть известно что факториал вычисляется через Гамма-функцию и Г(0)=1

  • @roman10497
    @roman10497 Рік тому

    Это гениально

  • @hetasshi
    @hetasshi 2 роки тому +1

    Приведу пример рекурсии:
    Решение лабиринта: Лабиринт можно представить в виде сетки клеток, где одни клетки заблокированы, а другие открыты. Для исследования лабиринта можно использовать рекурсивную функцию, пытаясь найти путь от начальной точки до конечной.

  • @kakubratnicknamenaetomsaite
    @kakubratnicknamenaetomsaite 3 місяці тому +1

    пока кто то на это вливает большие деньги, мы смотрим бесплатно)))

  • @АртурГребешков-к6ж
    @АртурГребешков-к6ж 6 років тому +1

    спасибо

  • @argabid5897
    @argabid5897 Рік тому +2

    Для тех кто не понял объясняю вкратце суть всех трех уроков:
    1) `Рекурсия` разбивается на задачи и записывается в стэк (очередь), задачи выполняются последовательно сверху вниз и работают по правилу: `последним зашел, первым вышел`.
    2) Факториал числа - это произведение натуральных чисел от 1 до самого числа (включая данное число). Обозначается факториал восклицательным знаком «!».
    пример: 3! = 1 · 2 · 3 = 6
    3) Принцип работы: сначала записываются данные из выражения рекурсии (N = 5 - 1), потом происходит последовательный вызов и выполнение возвращаемого значения рекурсии сверху вниз:
    ```
    (return 2 * (2 - 1)) * (return 3) * (return 4) * (return 5) = 120)
    ```

    • @Empty_line
      @Empty_line Рік тому

      Скажите пожалуйста почему N сразу не умножается на (N - 1) а только потом когда все закончилось?

    • @Empty_line
      @Empty_line Рік тому

      Это происходит потому что рекурсия следует стеку? как вы говорили

    • @argabid5897
      @argabid5897 Рік тому

      @@Empty_line функция принимает аргумент, который записывается

    • @Empty_line
      @Empty_line Рік тому

      @@argabid5897 сложно

    • @argabid5897
      @argabid5897 Рік тому

      @@Empty_line немного абстрагируйтесь от реализации и тогда все станет ясно

  • @shist2536
    @shist2536 5 років тому +1

    Вот, как посчитать факториал больших чисел, например, 1000! считается хорошо:
    #include
    using namespace std;
    int main()
    {
    int N, i, k, p, carry, Num_Digits;
    int Big_Factorial[750]; // Вводим массив с 750 элементами, у каждого из которых будет не более 4 цифр, таким образом всего в массив вмещается 3000 цифр, чего наверняка хватит для расчета факториала 1000! и меньше
    cout > N)) // Проверяем, не являются ли введенные символы буквами (защита от дурака)
    {
    cout 1000)
    {
    cout

  • @dimaan29
    @dimaan29 4 роки тому

    Автор молодец, объясняет доходчиво! Это лучшее объяснение из всех, что я видел! Но у меня складывается мнение, что лучше избегать рекурсий или заменять их на циклы, потому как с ними один большой геморрой: то у рекурсий постоянно stackoverflow, то сам механизм рекурсии очень сложен. пока автор объясняет, вроде бы понятно, как только самому что-нибудь сделать надо, то делаю методом тыка. Вот так-то!!! Интересно, можно ли в программировании совсем обойтись без рекурсии?

  • @khvorovpetr
    @khvorovpetr 2 роки тому

    Попытался сделать сам перед началом видео, вышло так, вроде работает
    int rez = 1;
    int fact(int a)
    {
    if (a == 1 || a==0)
    return rez;
    rez *= a;
    a - - ;
    return fact(a);
    }
    void main()
    {
    setlocale(LC_ALL, "rus");
    fact(5);
    cout

  • @СправаФея
    @СправаФея 7 років тому +7

    Что такое факториал - помню с вуза, поэтому решил попробовать организовать его вычисление до просмотра этого урока. Саму формулу нахождения факториала Н!=Н*(Н-1)! разумеется уже не помнил, но посидев подумав, и следуя от обратного, что Н!=1*2*3*..*Н у меня в итоге в программе вышла та же формула нахождения факториала, только "вывернутая", :) Вот моя функция:
    int factorial(int a) {
    if (a == 1)
    return a;
    a--;
    return factorial(a)*(a+1);
    }

    • @MrKesseker
      @MrKesseker 4 роки тому

      По-моему, где-то else не хватает🤔🤔🤔

  • @davidkroods811
    @davidkroods811 6 років тому

    вовсе не сложно братишка спасибо тебе

  • @Ordinary_man2049
    @Ordinary_man2049 Рік тому

    Int a;
    Cin

    • @ДавидМархевка-л5й
      @ДавидМархевка-л5й Рік тому

      ххапххпаа это да.

    • @ДавидМархевка-л5й
      @ДавидМархевка-л5й Рік тому

      Видимо код ты писал на скорую руку и не в vs code. У тебя неверный код, он не сработает как надо, тк как ты в параметре цикла сделал дикремент i, а внутри самого цикла увеличил, то есть сначала он увеличит на 1, а потом уменьшит когда цикл сработает 1 раз. Иначе говоря переменная i так и останется 1.
      Вот более верный код:
      int N = 5;
      if (N == 0)
      {
      std::cout

    • @laim3756
      @laim3756 2 місяці тому

      суть ролика - показать как работает рекурсия, а у вас минимум 3 ошибки в коде и 1 неточность.
      3 ошибки:
      1. нет объявления Count - int Count
      2. нет объявления i в цикле for - for ( *int* i = 1; i > a;
      for (a; a > 0; a--)
      {
      count *= a;
      }
      cout

    • @Ordinary_man2049
      @Ordinary_man2049 2 місяці тому

      @@laim3756 Спасибо, что поправили. Я стараюсь больше таких глупостей не писать. Коль скоро Вы соображаете в Сях, то можно ли заменить весь цикл for на
      while (a - -)
      count *= a;
      Посидел, подумал. Наверное, надо тогда магическое число добавить
      int a;
      cin >> a + 1;
      Иначе факториал до предыдущего числа посчитает.

  • @NoName-rb6fj
    @NoName-rb6fj 3 роки тому +2

    Аааа, спасибо!
    Я как раз не могла эту тему понять, а тут всё очень чётко объяснено!
    А почему ты используешь void main, а не int main, как обычно делают?

    • @Mayberry_
      @Mayberry_ 3 роки тому

      он не чего не возвращает. По этому и нет надобности в int

  • @codingposture
    @codingposture 4 роки тому +1

    Прикольно

  • @Cheshirick
    @Cheshirick Рік тому +2

    Доброго дня. Пробовала разные значения присваивать функции Fact(). Начиная с 20 выводятся отрицательные значения. Почему так?
    UPD: Все, разобралась. Слишком большое число получается. С long long все работает хорошо)

  • @dikar198
    @dikar198 2 роки тому +1

    Факториал например 5! = 5*4*3*2*1 = 120, так же намного проще, чем 5!= (4-1)! нет? Спасибо огромное за ваши уроки)

  • @ИльяСуворов-ы2и
    @ИльяСуворов-ы2и 9 місяців тому

    Лучший)