Созданная вами функция вычисляет общую стоимость единовременной суммы за определенное время, и, как вы указали, вы можете вызвать ее дважды (один раз с year
и один раз с year - 1
) и взять разницу, чтобы получитьВаш ответ.
Если вы действительно хотите сделать это рекурсивно за один раз, нам нужно продумать базовые случаи:
- Год 0: в начале интерес отсутствует
- Год 1: После первого года изменение составляет только начальную сумму, умноженную на процентную ставку
- Год 2+: С этого года мы делаем то же, что и в прошлом году, плюс проценты по этому проценту
return last_year + rate * last_year
- Или просто:
return last_year * (1 + rate)
Теперь мы можем собрать все это вместе:
def cpi_increase(year, initial, rate):
if year == 0:
return 0
if year == 1:
return initial * rate
return (1 + rate) * cpi_increase(year - 1, initial, rate)
Если мы распечатаем это, мы увидим значения для соответствия:
initial = 100000
rate = 0.05
for year in range(11):
print('{year:<5} {total:<21} {cpi_increase}'.format(
year=year,
total=initial * (1 + rate) ** year,
cpi_increase=cpi_increase(year, initial, rate)
))
Значения:
0 100000.0 0
1 105000.0 5000.0
2 110250.0 5250.0
3 115762.50000000001 5512.5
4 121550.62500000003 5788.125
5 127628.15625000003 6077.53125
6 134009.56406250005 6381.407812500001
7 140710.04226562506 6700.478203125001
8 147745.5443789063 7035.502113281251
9 155132.8215978516 7387.2772189453135
10 162889.4626777442 7756.64107989258
В наших базовых случаях также показано, как создать прямой расчет.В год y
мы применили умножение (1 + rate)
y - 1
раз и основание (initial * rate)
один раз.Это дает нам:
def cpi_increase_direct(year, initial, rate):
if year <= 0:
return 0
return initial * rate * (1 + rate) ** (year - 1)