Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 12, 2023 20:03:03

Malinaizer
От:
Зарегистрирован: 2009-03-28
Сообщения: 133
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите понйть поведение функции .

Не могу понять откуда берется число возращаемое функцией .

 def Fibonacci(n):
    if n == 0:
        return 0
    elif n == 1 or n == 2:
        return 1
    else:
        return Fibonacci(n - 1) + Fibonacci(n - 2)
Fibonacci(35) 



Офлайн

#2 Фев. 12, 2023 23:52:12

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

Помогите понйть поведение функции .

Malinaizer
Не могу понять откуда берется число возращаемое функцией
Число берётся из return, после того как там всё сработало и вышло через свои return'ы.

Здесь описывал принципы рекурсивной функции.



Отредактировано py.user.next (Фев. 12, 2023 23:54:21)

Офлайн

#3 Фев. 13, 2023 08:47:25

Malinaizer
От:
Зарегистрирован: 2009-03-28
Сообщения: 133
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите понйть поведение функции .

py.user.next
Число берётся из return, после того как там всё сработало и вышло через свои return'ы.
Какое то не очевидное поведение, почему суммируется количество рекурсий и куда оно записывается ? !



Офлайн

#4 Фев. 13, 2023 09:08:27

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

Помогите понйть поведение функции .

Malinaizer
Какое то не очевидное поведение
Так ты не понимаешь просто, что такое рекурсия, что такое вызов функции и как он происходит.

Malinaizer
почему суммируется количество рекурсий
Рекурсия здесь одна. Здесь нет множества каких-то рекурсий.

Malinaizer
и куда оно записывается
Оно никуда не записывается.

Ты просто начал изучение рекурсии с Фибоначчи, а надо начинать с чего-то попроще. Начни с факториала.
  
>>> def fact(n):
...     if n > 1:
...         return n * fact(n - 1)
...     else:
...         return 1
... 
>>> fact(5)
120
>>> fact(0)
1
>>> fact(1)
1
>>> fact(2)
2
>>> fact(3)
6
>>> fact(4)
24
>>> fact(5)
120
>>>



Отредактировано py.user.next (Фев. 13, 2023 09:16:15)

Офлайн

#5 Фев. 13, 2023 14:06:37

Malinaizer
От:
Зарегистрирован: 2009-03-28
Сообщения: 133
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите понйть поведение функции .


py.user.next
def fact(n):
… if n > 1:
… return n * fact(n - 1)
… else:
… return 1

>>> fact(5)
120
Вроде до перло . Получается что функция вызывается рекурсивно до те пор пока не не сработает if n > 1:? ID рекурсивно вызваных функций индентичен друг другу или занчанения изменились значит и ID разный ? Что происходит с предыдущей рекурсией , она остается в памяти до конца выполнения условия или удаляется ???



Офлайн

#6 Фев. 13, 2023 21:47:45

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

Помогите понйть поведение функции .

Вот смотри, видишь эти функции?

  
def fact1(n1):
    if n1 > 1:
        return n1 * fact2(n1 - 1)
    else:
        return 1
 
def fact2(n2):
    if n2 > 1:
        return n2 * fact3(n2 - 1)
    else:
        return 1
 
def fact3(n3):
    if n3 > 1:
        return n3 * fact4(n3 - 1)
    else:
        return 1
 
def fact4(n4):
    if n4 > 1:
        return n4 * fact5(n4 - 1)
    else:
        return 1
 
...
Чем они отличаются? Тут хорошо видно, что это разные функции. Устроены они одинаково, но при этом они все разные.

Вот при рекурсии происходит то же самое. Каждый новый вызов функции самой себя создаёт как бы новую такую же функцию, в которой есть всё то же самое, но при этом оно всё хранит в себе совершенно другие собственные данные. Структура одинаковая, а данные каждый раз внутри функции оказываются новые абсолютно. И вот эти функции ещё и общаются между собой. Одна функция вызывает какую-то и передаёт в неё информацию. А та функция отрабатывает все свои действия и в конце возвращает какую-то новую информацию обратно.

Вот хоть сто вызовов будет вот таких, это всё будет в виде функций с номерами 1, 2, 3, … , 98, 99, 100. И в каждой функции будет что-то своё. Пока они все будут работать, они все одновременно будут находиться в памяти, каждая на своём индивидуальном месте.


tags: recursion



Отредактировано py.user.next (Фев. 13, 2023 22:11:00)

Офлайн

#7 Фев. 13, 2023 22:47:33

Malinaizer
От:
Зарегистрирован: 2009-03-28
Сообщения: 133
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите понйть поведение функции .

Спасибо.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version