#python
#python
Вопрос:
У меня есть рабочий код, хотя есть кое-что, что я не могу понять.
def stonks(coins, rate, years):
"""
Each year your crypto-investment grows.
Write a recursive function that calculates the net worth of coins after some years.
Rate is in percents.
Round the answer down to the nearest integer.
stonks(1000, 10, 10) -> 2593
stonks(100000, 12, 3) -> 140492
:param coins: starting amount (0-100000)
:param rate: starting amount (0-100)
:param years: starting amount (0-50)
:return: coins after years
"""
if years is not 0:
return stonks((coins * (1 rate / 100)), rate, years - 1)
else:
return coins
Ожидаемый результат:
print(stonks(1000, 10, 10)) # -> 2593
print(stonks(100000, 12, 3)) # -> 140492
Мой вывод:
print(stonks(1000, 10, 10)) # -> 2593.742460100001
print(stonks(100000, 12, 3)) # -> 140492.80000000005
Если я добавлю math.floor(монеты * (1 ставка / 100)) -> Мой вывод:
print(stonks(1000, 10, 10)) # -> 2591 --- incorrect, needs to be 2593.
print(stonks(100000, 12, 3)) # -> 140492 --- correct
Как это возможно, один из выходов правильно настроен с 140492.80000000005 до 140492, но другой вывод 2593.742460100001 неправильно настроен на 2591?
Связано ли это с тем, что количество рекурсий больше, и, следовательно, math.floor применяется к каждому событию рекурсии, что приводит к отключению конечного вывода?
Комментарии:
1. Я бы предположил, потому что это делается для каждой рекурсии, а не только для последней. Попробуйте обернуть
floor
функцию вокруг начального вызоваstonks
функции.2. вау, это, похоже, сработало, большое вам спасибо, если бы я только мог выбрать комментарий в качестве лучшего ответа, ха-ха!
3. Все в порядке, просто рад, что у вас получилось 🙂
Ответ №1:
Вы можете просто сделать return stonks((coins * (1 rate / 100)), rate, years - 1) // 1