42 Рекурсия в Python. Рекурсивная функция Часть 2

แชร์
ฝัง
  • เผยแพร่เมื่อ 21 ธ.ค. 2018
  • 🔥🔥🔥 Инди-курс по Python 🔥🔥🔥
    stepik.org/course/63085/promo
    👉👉👉 Свой вопрос по курсу можешь задать в чате
    t.me/+SlnNhAO7caBlNDM6
    👉👉👉 Также подписывайся на мой телеграмм-канал
    t.me/python_egoroff
    egoroffartem.pythonanywhere.co...
    Функции - это многократно используемые фрагменты программы. При помощи функций можно объединить несколько инструкций в один блок, присвоить этому блоку имя и затем, обращаясь по имени этого блока, выполнить инструкции внутри него в любом месте программы необходимое число раз.
    Рекурсия - это когда функция вызывает саму себя.
    В видео разберем как при помощи рекурсии можно:
    - обработать строку;
    - возвести число в целую степень;
    - обойти элементы списка произвольной вложенности.
    Домашнее задание
    На строки
    informatics.msk.ru/mod/statem...
    informatics.msk.ru/mod/statem...
    Нумеролог
    acmp.ru/index.asp?main=task&i...
    egoroffartem.pythonanywhere.co...
    На сайте будет выкладываться более подробная информация о данном курсе и будущих видео.
    Все видео этого курса можете найти на сайте
    egoroffartem.pythonanywhere.co...
    или в Вк
    videos-177962775?secti...
    Если кому нужна помощь, предлагаю индивидуальные занятия. Подробнее пишите в личку в вк
    artem_egoroff
    python.study
    В данном группе можете найти информацию о новых видео и задать вопросы

ความคิดเห็น • 253

  • @egoroffchannel
    @egoroffchannel  4 ปีที่แล้ว +4

    Стать спонсором
    th-cam.com/channels/McC_43zGHttf9bY-xJOTwA.htmljoin
    Стать патроном
    www.patreon.com/artem_egorov

  • @user-gt2xo1gd9e
    @user-gt2xo1gd9e 5 ปีที่แล้ว +93

    Контент не соответствует с просмотрами. Ты достоин лучшего

    • @egoroffchannel
      @egoroffchannel  5 ปีที่แล้ว +13

      спасибо, надеюсь в плане просмотров все будет меняться в лучшую сторону)

    • @erickostandyan8977
      @erickostandyan8977 3 ปีที่แล้ว +1

      Согласен)

    • @rango7806
      @rango7806 2 ปีที่แล้ว +1

      Это по подписке, поэтому не соответствует

  • @dronikandronik
    @dronikandronik 5 ปีที่แล้ว +48

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

  • @sergeyblack6381
    @sergeyblack6381 ปีที่แล้ว +15

    Взял себе в привычку после просмотра урока на платных курсах, смотреть эту же тему тут, становится гораздо понятнее, спасибо огромное автору!

    • @kst5161
      @kst5161 7 หลายเดือนก่อน +2

      Остается исключить лишний элемент)

  • @sjotik
    @sjotik 2 ปีที่แล้ว +6

    А вот эта логика с обходом многоуровнево-вложенных списков очень крута. Большое спасибо!! Всех благ!

  • @He1LBoy34
    @He1LBoy34 5 ปีที่แล้ว +4

    Спасибо за новый урок!

  • @Bylat1
    @Bylat1 ปีที่แล้ว +11

    Задача с таймтега 6:00
    def f(x):
    if len(x)==0:
    return x
    if x[0]=='(':
    return x[0] + f(x[1:]) + ')'
    return x[0] + f(x[1:]) + x[0]
    x=input()
    print(f(x))
    не знаю как, но работает)

    • @haydarshohshirinov1602
      @haydarshohshirinov1602 9 หลายเดือนก่อน +1

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

  • @user-uq2nl9bt8b
    @user-uq2nl9bt8b 5 ปีที่แล้ว +3

    Очень круто объясняете. Спасибо вам

  • @elfate-fb5ux
    @elfate-fb5ux ปีที่แล้ว +2

    Очень наглядно и понятно, спасибо!

  • @user-uq2jm8ct3j
    @user-uq2jm8ct3j 2 ปีที่แล้ว +3

    Спасибо за столь простое объяснение непростой темы(для меня).

  • @user-mw2co3wb9k
    @user-mw2co3wb9k ปีที่แล้ว +1

    Благодарю за урок, всё очень доходчиво

  • @user-yo7kq4lr7j
    @user-yo7kq4lr7j ปีที่แล้ว +2

    Спасибо!!! Всё грамотно и подробно!!! наконец то я всё поняла!!!! ))))

  • @Indi8692
    @Indi8692 3 ปีที่แล้ว +2

    Самый лучший и понятный канал на Ютубе!! Спасибо!

  • @user-bj9hd1bc4j
    @user-bj9hd1bc4j ปีที่แล้ว +1

    Спасибо, классный курс!

  • @yatanai5685
    @yatanai5685 2 ปีที่แล้ว +1

    Благодарности нет границ!

  • @neopoligraf9991
    @neopoligraf9991 4 ปีที่แล้ว +1

    Спасибо за видео! Все отлично рассказано.

  • @heybeachMIN
    @heybeachMIN 7 หลายเดือนก่อน +1

    Ролик понравился, спасибо! Стало чуть понятней в теме 'Рекурсия' :)

  • @ec10nr34
    @ec10nr34 5 ปีที่แล้ว +8

    Спасибо! Каналу желаю удачи.

  • @sergeismazheluk1662
    @sergeismazheluk1662 4 ปีที่แล้ว +1

    видосик шикарный!!!! СПАСИБО большое

  • @Dmitrii-Zhinzhilov
    @Dmitrii-Zhinzhilov ปีที่แล้ว

    Артём, благодарю! 👍🔥🔥🔥

  • @user-evgeniy64
    @user-evgeniy64 4 ปีที่แล้ว +5

    Все мозги разбил на части, все извилины заплел))))

  • @user-mj4ti5nt1k
    @user-mj4ti5nt1k ปีที่แล้ว +4

    Забавный случай был с рекурсивной функцией. Я тогда ещё учился в школе, питон знал на приличном уровне. Учитель даёт задание, решает его - получается строк шесть без вызова функции. Я когда сдаю ей решение в одну у неё чуть глаза на лоб не вылезли. Забавно было очень.

  • @denistalko6585
    @denistalko6585 ปีที่แล้ว +4

    Спасибо за столь прекрасное объяснение сложной темы!

  • @stanislavdusiak9007
    @stanislavdusiak9007 4 ปีที่แล้ว +10

    Действительно... крайне качественный контент, я ну оооочень долго и много перерыл курсов пока не нашел именно этот, странно, что просмотров нет........... Артем, запили видосы по классам пожалуйста.

    • @egoroffchannel
      @egoroffchannel  4 ปีที่แล้ว +2

      Спасибо, видимо ещё не все знают о существовании моего канала

  • @felixcriminibusnulluseritd7315
    @felixcriminibusnulluseritd7315 2 ปีที่แล้ว

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

  • @sajkevegan941
    @sajkevegan941 4 หลายเดือนก่อน

    Спасибо, хорошо объясняете

  • @MrKravetz
    @MrKravetz ปีที่แล้ว

    Лучшие уроки по питону на Ютубе.

  • @makseo651
    @makseo651 3 หลายเดือนก่อน

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

  • @Vlamir_ave_tonna
    @Vlamir_ave_tonna 9 หลายเดือนก่อน

    Чувак конент в кайф! Жги ещё!

  • @xvostov_k
    @xvostov_k 2 ปีที่แล้ว +1

    Огромное спасибо

  • @user-vb6cv5uk7m
    @user-vb6cv5uk7m 4 ปีที่แล้ว +1

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

  • @galinaoliver5624
    @galinaoliver5624 ปีที่แล้ว +3

    Очень сложно, но интересно!

  • @kdjdjwjsvejwkdbs4351
    @kdjdjwjsvejwkdbs4351 ปีที่แล้ว

    Понятно и интересно.

  • @maksimgerasimenko4287
    @maksimgerasimenko4287 4 ปีที่แล้ว +1

    Спасибо!

  • @nervoussystem6001
    @nervoussystem6001 5 ปีที่แล้ว +1

    Так пойдёт вторая задача со скобочками:
    stroka = input('enter the string:')
    def f(stroka):
    if len(stroka) == 0:
    return
    print(stroka[0],end='')
    f(stroka[1:])
    if stroka[0] == '(':
    print(')',end='')
    else:
    print(stroka[0],end='')
    f(stroka)
    Сгодится на ваш взгляд,спасибо

  • @inconstancy
    @inconstancy 3 ปีที่แล้ว

    Вот ещё один способ решения задачи на возведение в степень с использованием рекурсии (без проверки на чётность степени). Просто умножаем число на само себя n - 1 количество раз:
    def power(x, n):
    if n < 0:
    return 1 / power(x, -n)
    if n == 0:
    return 1
    return x * power(x, n - 1)
    x, n = map(int, input().split())
    print(power(x, n))
    Но, несомненно, алгоритм, который вы описали в видео, будет работать быстрее, так как будет меньше рекурентных вызовов функции. И чем больше степень, тем ваш алгоритм будет работать быстрее по сравнению с вышеуказанным. Спасибо за отличную подачу материала)

  • @user-hu2ji2lw7v
    @user-hu2ji2lw7v 3 ปีที่แล้ว +3

    Спасибо, Артем!! Надеюсь, с твоими уроками освою эту сложную тему.
    Решение задачи с зеркальными скобками
    def rec(s):
    if len(s)==0:
    return s
    if s[len(s)-1]=='(':
    s+=')'
    if s[len(s)-1].isalpha():
    s+=s[len(s)-1]
    return s[len(s)-2] + rec(s[0:-2]) + s[len(s)-1]
    PS: честно, я почти сдалась, но решение пришло. правильное ли?

  • @galinaoliver5624
    @galinaoliver5624 ปีที่แล้ว

    Огромное спасибо. Подарок

  • @user-fc6nr8cr4p
    @user-fc6nr8cr4p 3 ปีที่แล้ว +1

    Хорошая обучалка, хоть рекурсию более менее закрепил, а то применить никак ее не мог

  • @user-ui4oi8pb7r
    @user-ui4oi8pb7r 4 ปีที่แล้ว +6

    Спасибо большое за уроки! Всё доступным и понятным языком. Узнала много полезного.
    Уточните пожалуйста в примере с возведением в степень: power (x,n) через запятую, как программа распознает, что это именно возведение в степень?

    • @user-wr1jy5pc2o
      @user-wr1jy5pc2o 3 ปีที่แล้ว +3

      Задался этим вопросом и опечалился, когда увидел, что Ваш комментарий без ответа. Поэтому всем, у кого возник этот вопрос: распишите себе весь процесс на бумаге и увидите, что сам интерпретатор не в курсе, что здесь заложена операция возведения в степень, он просто выполняет умножение, согласно прописанным условиям.

  • @husam8204
    @husam8204 หลายเดือนก่อน

    Блин, ну доходчиво же. Спс

  • @abs77777
    @abs77777 หลายเดือนก่อน

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

  • @user-ct7oy6rm8i
    @user-ct7oy6rm8i 11 หลายเดือนก่อน

    спасибо

  • @JohnotanDoe
    @JohnotanDoe 4 ปีที่แล้ว +1

    Годно, пора продавать на степике итд

  • @artem_garyanov
    @artem_garyanov 3 ปีที่แล้ว +1

    Коммент для продвижения канала и безграничная благодарность Вам!

  • @iglstivens
    @iglstivens 3 ปีที่แล้ว +2

    Я что то не совсем понимаю, в задаче из видио когда возводили число в степень, где тот момент когда мы пишем x**n?

  • @shlm3650
    @shlm3650 5 ปีที่แล้ว

    Здравствуйте! Отличное объяснение, хотелось бы получить на счёт т.н. хвостатых рекурсий. И ещё как в рекурсии не получая пустой список как аргумент, объявить его чтобы он был объявлен не рекурсивно?

  • @user-ly7mq3fz7k
    @user-ly7mq3fz7k ปีที่แล้ว +2

    В примере состепенью числа можно было не идти до 0 степени , а остановиться на 1 , так быстрее будет

  • @user-mh5yb3ub3r
    @user-mh5yb3ub3r 4 ปีที่แล้ว +8

    Отдельное спасибо за практические задания, учил рекурсию по другим лекциям, без практики было не все понятно, сейчас вроде разобрался окончательно
    задача 2:
    def rec(x):
    if len(x)==1:
    if x!="(":
    return x+x
    return "()"
    if x[0]!="(":
    return x[0]+ rec(x[1:])+x[0]
    return "(" + rec(x[1:])+ ")"
    x=input()
    print(rec(x))

  • @user-pf4sd6yq2g
    @user-pf4sd6yq2g 2 ปีที่แล้ว

    Добрый день, Артём. Не совсем поняла решение задачи по возведению в степень.
    Стараюсь перед вашим объяснением порешать сама и у меня получился вот такой вариант:
    def power(x,n):
    if n==1:
    return x
    if n==0:
    return 1
    if n

  • @madjim9790
    @madjim9790 4 หลายเดือนก่อน

    1 задача про зеркальность:
    def rec(s):
    if len(s) == 1:
    return s + s
    return s[0] + rec(s[1:]) + s[0]
    2 задача про нумерологию:
    def rec(x, n = 0):
    if len(str(x)) == 1:
    return x, n
    return rec(sum(list(map(int, str(x).strip()))), n + 1)
    x = int(input())
    print(*rec(x))
    начинаю лучше разбираться в рекурсиях, тема тяжеловатая

  • @egoroffchannel
    @egoroffchannel  12 วันที่ผ่านมา

    🫵 Теория без практики - ничто, поэтому 👇
    🐍 stepik.org/course/63085/promo
    👉 специально для тебя создал бесплатный топовый курс по Python
    👉 В нем тебя ждет:
    📗 более 400 практических заданий на программирование
    📗 более 250 тестовых заданий на проверку материала
    📗 десятки часов видеоматерилов по теории
    📗 видеоразборы решения заданий
    📗 текстовые материалы по урокам, примеры кода
    📗 доступ к закрытому чату с дружественной обстановкой
    📗 сертификат в случае успешного прохождения курса

  • @Bylat1
    @Bylat1 ปีที่แล้ว +1

    Нумеролог
    x = int(input())
    def f(x, y=0):
    if x

  • @user-nd9do2nk2j
    @user-nd9do2nk2j 2 ปีที่แล้ว

    в первом задании если с внешними скобочками, то вот так можно сделать:
    def brackets(s):
    if len(s)

  • @alexkorel4494
    @alexkorel4494 3 ปีที่แล้ว

    Отличные уроки!
    Хорошо бы видео разбор по задачам этой темы сделали бы :-)
    вроде все понимаешь и думаешь как все просто ,а начинаешь делать задания и все ж..а( на пару дней застреваешь. Самому не всегда получается придумать решение, и начинаешь искать в инете по теме.
    подскажите пожалуйста где ошибка? не принимает на 4 тесте
    b=input()
    def rec(b, lvl = 0, s = 0):
    if len(str(b)) == 1:
    return b + ' ' + str(lvl)
    else:
    s+= sum(list(map(int, str(b))))
    lvl += int((len(str(b)))-1)
    b = sum(list(map(int, str(b))))
    return rec(str(b), lvl)
    print(rec(b))

  • @nto2503
    @nto2503 4 ปีที่แล้ว

    Подскажите, пожалуйста, как решается задача А (прибавить 3, прибавить 5)?

  • @vrotkat7813
    @vrotkat7813 ปีที่แล้ว +2

    Нумеролог
    c=0
    def q(a):
    global c
    if a

    • @evgeniy_epov
      @evgeniy_epov ปีที่แล้ว +1

      лучшее решение, так и не смог к нему прийти

    • @user-xi9hi4tf4j
      @user-xi9hi4tf4j 7 หลายเดือนก่อน

      чуть лучше наверное так, как Артем показывал с уровнями, чтоб без глобальных переменных, а в целом действительно лучшее решение на чистой рекурсии:
      def q(a, c = 0):
      if a

  • @Lord_MarshaL
    @Lord_MarshaL 2 ปีที่แล้ว

    молодец

  • @user-zw1wp3ml3u
    @user-zw1wp3ml3u ปีที่แล้ว

    Здравствуйте! Объясните пожалуйста как решается задача "Нумеролог"

  • @varyachekhovidova5794
    @varyachekhovidova5794 ปีที่แล้ว

    нумеролог
    def recursive_sum(n, s=0):
    return s + n if n < 10 else recursive_sum(n // 10, s + n % 10)
    def numerolog(n, level=0):
    print(n, level) if n < 10 else numerolog(recursive_sum(n), level+1)
    можно и через встроенный sum, но решила использовать рекурсию по максимуму вместо итерации)

  • @everythingforyoutube4031
    @everythingforyoutube4031 ปีที่แล้ว +2

    Задача: Нумеролог. Я старался применить и рекурсию с вложенные функции. Спасибо автор!!!
    def asum(a):
    b = 0
    for i in str(a):
    b += int(i)
    return b
    def text(a, count=0):
    if a < 10:
    return f'{a} {count}'
    return text(asum(a), count + 1)
    print(text(int(input())))

    • @user-xi9hi4tf4j
      @user-xi9hi4tf4j 7 หลายเดือนก่อน

      применил цикл for, а значит уже не чистая рекурсия )

    • @heybeachMIN
      @heybeachMIN 7 หลายเดือนก่อน

      @@user-xi9hi4tf4j а как по другому решить то?

    • @user-xi9hi4tf4j
      @user-xi9hi4tf4j 7 หลายเดือนก่อน

      @heybeachMIN ну я так решил, чуть проще, без циклов. Видел в другом комменте у вас такое же решение было.
      def q(a, c = 0):
      if a

    • @heybeachMIN
      @heybeachMIN 7 หลายเดือนก่อน +1

      @@user-xi9hi4tf4j да я потом сам подумал и нашел решение) но сначало казалось что без for никак ) спасибо за Ваше решение

  • @user-tf5gf6pn9q
    @user-tf5gf6pn9q 3 ปีที่แล้ว

    def num(x,ch1=0):
    if x

  • @eazy8537
    @eazy8537 ปีที่แล้ว +1

    Нумеролог:
    def st(x, c=0):
    return (x, c) if x < 10 else st(sum([int(i) for i in str(x)]), c+1)

    • @user-xi9hi4tf4j
      @user-xi9hi4tf4j 7 หลายเดือนก่อน

      цикл for остался ) а значит это не рекурсия

    • @heybeachMIN
      @heybeachMIN 7 หลายเดือนก่อน

      если хочется максимально коротко и с рекурсией то лучше уже такое
      def text(a, count=0):
      return f'{a} {count}' if a < 10 else text(a // 10 + a % 10, count + 1)

  • @CoolMatthew851
    @CoolMatthew851 4 ปีที่แล้ว

    можете подсказать как распаковать несколько уровневый список без циклов через рекурсию, пожалуйста (

  • @volodymyrkozlovskyi5639
    @volodymyrkozlovskyi5639 3 ปีที่แล้ว

    Артем, как ты думаешь это оптимальное решение или можно лучше? :
    def numerolog(s,count=0):
    if len(s) == 1:
    return s,count
    return numerolog(s=str(sum([int(i) for i in s])), count=count+1)
    print(numerolog(input()))

  • @cocojabaa
    @cocojabaa ปีที่แล้ว

    Вот мой вариант решения задачи с тайм кода 10:10
    def zadacha3(n, count=0):
    if len(str(n)) == 1:
    return n, count
    return zadacha3(n = sum((int(i) for i in list(str(n)))), count=count+1)
    print(zadacha3(99))
    Вывод: (9, 2)
    Строка где возвращается рекурсия скорее всего тяжело читается, но сделал как сделал, главное что работает

  • @user-rw2ig6nb5l
    @user-rw2ig6nb5l 3 ปีที่แล้ว +1

    Артем, спасибо большое за уроки.
    Подскажи, плз., для чего использовался 'pass' ? Какова его функция?

    • @egoroffchannel
      @egoroffchannel  3 ปีที่แล้ว

      такие конструкции как if while for def должны содержать в себе блок команд на отступах после двоеточия. Этот блок не может быть пустым, то есть обязан состоять хотя бы из одной строчки. Иногда нужно оставить блок пустым(без каких либо действий), и вот для этого нужен pass. pass - пустой блок

    • @user-rw2ig6nb5l
      @user-rw2ig6nb5l 3 ปีที่แล้ว

      @@egoroffchannel Большое спасибо.

  • @adilkhanarts5294
    @adilkhanarts5294 10 หลายเดือนก่อน

    zada4a numerolog:
    n = input()
    c = 0
    def f(n):
    global c
    if (len(n) == 1):
    return n
    c+=1
    return f(str(sum(map(int, list(n)))))
    print(f(n), c)

  • @hateUglys
    @hateUglys 4 ปีที่แล้ว

    пришлось поломать голову.. спасибо огромное за этот видеокурс. очень очень полезный и понятный!!
    задание 2:
    def mirror(line, new_line=""):
    if len(line)

    • @COMBINATORS
      @COMBINATORS 4 ปีที่แล้ว

      можно было гораздо проще:
      s=input()
      def rec(s):
      if len(s) == 0:
      return s
      return s[0] + rec(s[1:]) + s[0].replace('(', ')')
      print(rec(s))

  • @umni_kot
    @umni_kot 4 ปีที่แล้ว

    Вроде задачи не очень сложные для понимания того, как их решить, но как это записать в код - это уже проблема. Как эффективно тренироваться в этом плане ?

  • @user-xi9hi4tf4j
    @user-xi9hi4tf4j 7 หลายเดือนก่อน

    задача на текст + зеркальное отображение без спец.методов пайтона(у многих только "зеркало" возвращало):
    def concat_revers(txt):
    if txt[0] == '(':
    mirror_sym = ')'
    elif txt[0] == ')':
    mirror_sym = '('
    else:
    mirror_sym = txt[0]
    if len(txt) == 1:
    return txt+mirror_sym
    else:
    return f'{txt[0]}{concat_revers(txt[1:])}{mirror_sym}'

  • @vafli3084
    @vafli3084 ปีที่แล้ว +1

    Решения задач со строками:
    1. Звездочки
    def rec_stars(s):
    if len(s) == 1:
    return s
    else:
    return s[0] + '*' + rec_stars(s[1:])
    2. Отзеркалить строку и развернуть кавычки
    def rec_mirror(s):
    if len(s) == 1:
    return s if s != '(' else ')'
    else:
    return s[-1] + rec_mirror(s[:-1]) if s[-1] != '(' else ')' + rec_mirror(s[:-1])

    • @user-xi9hi4tf4j
      @user-xi9hi4tf4j 7 หลายเดือนก่อน

      там не просто отзеркалить надо, а сконкатенировать с входной строкой )

  • @user-ly7mq3fz7k
    @user-ly7mq3fz7k ปีที่แล้ว

    Ура , работает:
    def rec(str):
    if len(str)==1 or len(str)==2 or '(' not in str:
    return str
    return str[0:str.index('(')] + '(' + rec(str[str.index('(') + 1:]) + ')' + str[0:str.find('(')[::-1]

  • @skorw1softs
    @skorw1softs 10 หลายเดือนก่อน

    задача про скобки:
    def rec(a: str):
    if len(a)

  • @Ilinium1
    @Ilinium1 4 ปีที่แล้ว +1

    На ответ со скобками я сделал так:
    def copyrit(s):
    if len(s)

  • @dima2y5
    @dima2y5 3 หลายเดือนก่อน

    вот так решил вторую задачу со скобочками
    def rev(s):
    if len(s) == 0:
    return s
    else:
    if s[0] == '(':
    return s[0] + rev(s[1:]) + ')'
    return s[0] + rev(s[1:]) + s[0]

  • @unidentified386
    @unidentified386 ปีที่แล้ว

    Нашел более короткое решение задачи со степенью:
    def recursivepower(x,n):
    if n == 1:
    return x
    if n == 0:
    return 1
    return x * power(x,n-1)

  • @viktorsokolov8153
    @viktorsokolov8153 2 ปีที่แล้ว

    Спасибо за изумительный курс. Не понимаю в первом примере, какую s в итоге мы возвращаем, из 3й строки или 4й . Если len(s) = 1, то s которая возвращается следующей строкой состоит всего из одного символа.

    • @nikprilutskiy7064
      @nikprilutskiy7064 ปีที่แล้ว +1

      S с длиной 1 или 2 возвращается из 3-й строки, таким образом завершается работа функции, иначе бы рекурсия стала бесконечной.

  • @shocko3794
    @shocko3794 3 หลายเดือนก่อน

    Почему в данном случае не выводится None, когда мы не используем return?

  • @galinaoliver5624
    @galinaoliver5624 ปีที่แล้ว

    #добавить зеркальную строку
    def skobka(y):
    if y == '(':
    return ')'
    return y
    def mirror(s):
    if len(s) < 2:
    return skobka(s)
    return mirror(s[1:]) + skobka(s[0])
    s = input()
    print(mirror(s))

    • @user-xi9hi4tf4j
      @user-xi9hi4tf4j 7 หลายเดือนก่อน

      по заданию нужна была исходная + зеркальная )

  • @MoronicSoul
    @MoronicSoul 2 ปีที่แล้ว

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

  • @dvlpsuccess7289
    @dvlpsuccess7289 ปีที่แล้ว

    вот ответ
    ask = input()
    askl = len(ask)
    nf = 1
    def ft (x):
    global nf
    if nf < askl:
    aqwe = (ask[nf]+'*')
    nf = nf+1
    print(aqwe, end='')
    ft(x)
    ft(ask)

  • @enjoyyourlife5067
    @enjoyyourlife5067 10 หลายเดือนก่อน

    def mirror(s):
    return s + s[::-1].replace('(', ')')
    вроде работает :)

  • @user-dd3jt6nj4c
    @user-dd3jt6nj4c 4 ปีที่แล้ว +2

    def life(x, count=0):
    x = eval('+'.join([i for i in str(x)]))
    if len(str(x)) == 1:
    return x, count+1
    return life(x, count+1)

    • @DoktorZlo96
      @DoktorZlo96 4 ปีที่แล้ว

      уже близко, но не правильно

  • @amirkhuzin9884
    @amirkhuzin9884 5 ปีที่แล้ว

    У меня получилось вот такое решение последней задачи
    def guy(s, n = 0):
    k = 0
    if s//10 == 0:
    return s, n
    else:
    l = str(s)
    for i in range(len(l)):
    k += int(l[i])
    s = k
    return guy(s, n+1)
    print(guy(int(input())))

  • @SemyonMazepin
    @SemyonMazepin 10 หลายเดือนก่อน

    4:10 почему начальная буква берется с индексом 0 и в рекурсии мы берём индекс 1 а конечная что в возврате -1 что в рекурсии -1. Не должно ли -2 быть в срезе?

  • @Mirror13088
    @Mirror13088 6 หลายเดือนก่อน

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

    • @egoroffchannel
      @egoroffchannel  6 หลายเดือนก่อน +1

      С помощью практики на моем бесплатном курсе
      stepik.org/course/63085/promo

  • @vvnbel
    @vvnbel 3 ปีที่แล้ว +1

    Подскажите, в этой строчке: return power(x, n//2) * power(x, n//2) - как так получается, что один аргумент - это степень, а другой - это число, почему одно возводится в другое, где инструкция чтобы икс возводился в степень n?

    • @egoroffchannel
      @egoroffchannel  3 ปีที่แล้ว

      мы сами определяем кто степень, а кто число

    • @vvnbel
      @vvnbel 3 ปีที่แล้ว

      @@egoroffchannel окей, с этим ответом мне жить)

  • @user-fc6nr8cr4p
    @user-fc6nr8cr4p 3 ปีที่แล้ว

    ДЗ, не знаю куда нужно было скидывать, кидаю и сюда тоже
    Нумеролог:
    with open ('INPUT.TXT') - as inf:
    number=inf.radline()
    count=0
    def numerolog(number,count):
    summa=0
    if number

  • @eYVgeni
    @eYVgeni 3 ปีที่แล้ว

    Артем, здравствуйте. Никак не могу разобраться почему решение схожей задачи на вашем курсе на степике( преобразование списка с вложенными списками в линейный)
    не принимает система.
    Мое решение
    уточняю, идет о последней задаче в главе 7.7 Рекурсия в Python. Рекурсивная функция Часть 1)

    • @egoroffchannel
      @egoroffchannel  3 ปีที่แล้ว

      и как посмотреть решение?

    • @eYVgeni
      @eYVgeni 3 ปีที่แล้ว

      @@egoroffchannel очень странно, что его стало не видно6 видно плагин к сафари с темной темой не корректно сработал. flat = []
      def flatten(lst):
      for i in lst:
      if type(i) == int:
      flat.append(i)
      if type(i) == list:
      flatten(i)
      return(flat)

  • @annk6637
    @annk6637 2 ปีที่แล้ว

    def numerolog2(n, count2=0):
    n = sum([int(i) for i in list(str(n))])
    if len(str(n)) > 1:
    return numerolog2(n, count2+1)
    return n, count2+1

  • @Fillmore634b
    @Fillmore634b 9 หลายเดือนก่อน

    5.47 где вторая задачка сделал без рекурсии
    def func(s):
    s_reversed = (''.join(_.replace('(', ')') for _ in s[::-1]))
    return s + s_reversed
    s=input()
    print(func(s))
    С рекурсией сам не смог, взял решение снизу (аплодирую автору сам не додумался такой пирамидкой сделать) и укоротил код немного
    def rec(x):
    if len(x)==1:
    return x+x if x != '(' else x+')'
    return x[0] + rec(x[1:])+x[0] if x[0] != '(' else x[0] + rec(x[1:]) + ')'
    x=input()
    print(rec(x))

  • @killerkey1814
    @killerkey1814 4 ปีที่แล้ว

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

  • @user-evgeniy64
    @user-evgeniy64 4 ปีที่แล้ว

    Задачка №3
    Сайт решение принял, но я не понял, как в функцию запихать саму строку.
    У меня выводит только "отзеракаленную" копию.
    Пришлось в принт запихать конкатенацию изначальной строки и ее копии
    Комрады, подскажите, может кто изящнее решил?
    def rec(s):
    if len(s) == 0: # Выход из рекурсии
    return s
    # Отщипываем первый символ и плюсуем его же
    return rec(s[1:]) + s[0].replace('(', ')')
    s = input()
    print(s+rec(s))

  • @vvnbel
    @vvnbel 3 ปีที่แล้ว

    def power(x,n)
    вопрос - почему n идёт как степень числа x исходя из этой записи?
    К примеру есть функция pow, которая импортируется из math - там аргументы передаются как раз таким образом, но это ведь 2 разные функции - в одном случае та что мы сами пытаемся сделать, а во втором готовая встроенная

    • @egoroffchannel
      @egoroffchannel  3 ปีที่แล้ว

      Можно параметры функции располагать в любом порядке, значит функцию можно было определить как def power(n,x)
      Затем, какой параметр является числом, а какой степенью определяешь только ты сам, но после того как определил и вызывать тогда ты должен соответствующе и одинаково всегда
      И еще, эти параметры можно называть как хочешь, например def power(chislo,stepen) и вот тогда уже точно будет понятно, кто есть кто

    • @vvnbel
      @vvnbel 3 ปีที่แล้ว +4

      @@egoroffchannel спасибо за ответ) саму физику процесса еще не понял, например в этой строчке: return funk(x, n//2) * funk(x, n//2) - как так получается, что один аргумент - это степень, а другой - это число, почему одно возводится в другое, где инструкция чтобы икс возводился в степень n?

  • @user-ln9ft2cl9s
    @user-ln9ft2cl9s ปีที่แล้ว

    Напишите рекурсивную функцию remove_v, удаляющую из строки все буквы «v» и возвращающую результирующую строку.

  • @Ilinium1
    @Ilinium1 4 ปีที่แล้ว

    вот с номерами помучился, но:
    count = 0
    def numerolog2(*a):
    try:
    n = list(a[0])
    except TypeError:
    n = [a[0], 0]
    if n[0] // 10 == 0:
    return n
    if n[0] // 10 != 0:
    counter()
    return [numerolog2([(n[0] % 10) + numerolog2([n[0] // 10, n[1]])[0], n[1]])[0] , count]
    def counter():
    global count
    count += 1;

  • @COMBINATORS
    @COMBINATORS 4 ปีที่แล้ว

    Нумеролог:
    n=input()
    def numerolog(n,count=1,summ=0):
    if len(str(n))==1:
    return int(n),0
    for i in (str(n)):
    summ+=int(i)
    if len(str(summ))!=1:
    return numerolog(summ,count+1,0)
    return summ,count
    print(*numerolog(n))

  • @sosrebet1337
    @sosrebet1337 2 ปีที่แล้ว +1

    Решение задачи "Нумеролог"
    a = int(input())
    def rec(x, counter=0):
    s = 0
    if x < 10:
    return x, counter
    for i in str(x):
    s += int(i)
    counter += 1
    if s > 9:
    return rec(s, counter == 1)
    return s, counter
    print(*rec(a))

    • @yevhenbaklahov193
      @yevhenbaklahov193 ปีที่แล้ว

      я так понял смысл рекурсии - уйти от циклов, а у Вас вышла рекурсия с циклом ))) ... хотя у меня и это не получилось.
      Вот, все что смог, сумма цифр считается, но не пойму как в рекурсию счетчик засунуть (чтоб без цикла). Если кто подскажет, буду благодарен
      def numerolog(n:int):
      if n

    • @vonravik2012
      @vonravik2012 ปีที่แล้ว

      @@yevhenbaklahov193 count += len(str(number)) - 1

  • @Asmolovskyi
    @Asmolovskyi 2 ปีที่แล้ว

    Брррр, чёто я сломал себе мозг со 2й задачей на 2 часа (рекурсия это что-то :-) )
    def Mirracle(a):
    if len(a) == 1:
    if a == '(':
    return '()'
    return a + a
    if a[0] == '(':
    return a[0] + Mirracle(a[1:]) + ')'
    else:
    return a[0] + Mirracle(a[1:]) + a[0]
    a = 'abc(def(g'
    print(Mirracle(a))