Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 20, 2015 23:06:11

Luca_Brasi
Зарегистрирован: 2015-11-20
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Рекурсивная функция

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

a1=['a11',['a2',['a31','a32',['a41','a42']]],'a52'] 
    a=[a1]
    def forvard(elem):
        if isinstance(elem,list):
            for x in elem:
                if isinstance(x,list) == False:
                    print(x)
                forvard(x)
    forvard(a)
Изначально я использовал без инструкции if. Результат - я превышал допустимую глубину… Это что получается, данной инструкции if хватает для выхода из функции?

Офлайн

#2 Ноя. 21, 2015 03:11:29

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Рекурсивная функция

Luca_Brasi
Вникнул в это новшество
Этому новшеству лет 50, если не больше.
В программировании она с лиспа началась.



Офлайн

#3 Ноя. 21, 2015 09:04:08

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Рекурсивная функция

Luca_Brasi
я превышал допустимую глубину…
for i in 'a':
print(i)
a
Элементами строки являются строки из одной буквы. Каждую строку из одной буквы тоже можно итерировать и получить туже самую букву. И так до бесконечности.

Это следствие архитектурного решения что в питоне нет элементарного типа буква.



Отредактировано doza_and (Ноя. 21, 2015 09:06:54)

Офлайн

#4 Ноя. 21, 2015 21:03:13

Luca_Brasi
Зарегистрирован: 2015-11-20
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Рекурсивная функция

меня еще один момент интересует.

a1=[11,[2,[31,32]]]
    a=a1
    def forvard(elem):
        #import pdb; pdb.set_trace()
        if isinstance(elem,(list,tuple)):
            for x in elem:
                print('Это массив  ', elem)
                if isinstance(x,(list,tuple))==False:
                    print(x)                
                forvard(x)
    forvard(a)
Выхлоп примерно такой.
Это массив (11, (2, (31, 32)))
11
Это массив (11, (2, (31, 32)))
…..
Откуда береться еще последняя строка “Это массив (11, (2, (31, 32)))”?

Отредактировано Luca_Brasi (Ноя. 21, 2015 21:06:40)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version