при выполнении базового случая печатает значение, но возвращает - PullRequest
0 голосов
/ 13 июня 2019

`` # код должен возвращать значение получателя, когда базовый случай выполняется по окончании рекурсии import math days = int(input()) def adv(days,recipient,likes,depth): depth+=1 print(" "*depth + "adv({},{})at day {} and likes are {}".format(days-4,recipient,days,likes)) days -= 1 if days == 0: #print(recipient) print(likes) #print(" "*depth + "adv({},{})at day {} and likes are {}".format(days-4,recipient,days,likes)) здесь он возвращает получателя` возвращаемый получатель, в противном случае: likes = likes + math.floor (получатель / 2) adv(days, math.floor (получатель / 2) * 3, лайки, глубина)

# переменная a должна принимать значение получателя, но

a = adv (days + 1), 5,0,1)

print (a)

возвращается None


1 Ответ

0 голосов
/ 13 июня 2019

Это потому, что это рекурсивная функция, но вы не возвращаете вызов, когда он вызывается изнутри. Вместо этого при вызове изнутри самого внутреннего возвращаемого значения отбрасывается, и None передается и возвращается исходным вызовом. Вы можете исправить это так:

import math
days = int(input())
def adv(days,recipient,likes,depth):
    depth+=1
    print(" "*depth + "adv({},{})at day {} and likes are {}".format(days-4,recipient,days,likes))
    days -= 1
    if days == 0:
        return recipient
    else:
        likes =likes+ math.floor(recipient/2)
        return adv(days,math.floor(recipient/2)*3,likes,depth) #<------

a= adv(days+1,5,0,1)
print(a)

выход:

5
  adv(2,5)at day 6 and likes are 0
   adv(1,6)at day 5 and likes are 2
    adv(0,9)at day 4 and likes are 5
     adv(-1,12)at day 3 and likes are 9
      adv(-2,18)at day 2 and likes are 15
       adv(-3,27)at day 1 and likes are 24
27
...