Создание сервиса "Процентных расчетов"
1.3.1 Задача о срочном и досрочном закрытии вклада
Вкладчик положил в банк некую сумму средств в sum денежных единиц под p процентов за один период времени. Данный период может быть, как год, так и месяц, и даже неделя. Нам необходимо составить и проанализировать программу- функцию, которая будет возвращать величину вклада по истечении n периодов времени, где n = 1, 2, 3 и т.д.
Стоит обратить внимание, что функция будет иметь три аргумента: сумма средств sum, p - процент вклада и n - количество периодов.
Обозначим искомую функцию как invest(sum, p, n). Чтобы найти значения данной функции, воспользуемся формулой:
(1)
где sum - сумма денежных единиц;
p - процентная ставка;
n - период времени (год, месяц, неделя и т.д.).
Таким образом, чтобы реализовать данную функцию и решить поставленную задачу применим рекурсивный алгоритм. В постановке задачи можно увидеть реализацию параметров. Рекурсивный алгоритм будем осуществлять по параметру n - количеству периодов в данном случае.
Если вкладчик решает взять свой вклад обратно, то есть до истечения первого периода времени, то процент ему не начисляется и возврат будет только той суммы средств sum, которую он изначально вложил. В противном же случае сделать вклад на некоторую сумму в банк на n периодов - это то же самое, что сделать вклад на эту же сумму на n - 1 период, взять и снова положить на один период. Формула для решения данной задачи будет следующей:
(2)
Проведем декомпозицию формулы (1) иным способом и получим другую реализацию рекурсивного алгоритма. Так, сделать вклад на некоторую сумму в банк на n периодов - это то же самое, что сделать вклад на эту же сумму на 1 период, взять и снова положить на n-1 период. Преобразовав предыдущую формулу (1), получим:
(3)
Программная реализация формул (2) и (3) приблизительно имеет равную степень сложности, поэтому обе имеют место быть. Далее, если потребуется перейти обратно, к нерекурсивному алгоритму, то лучше всего пользоваться формулой (2).
Также не составляет труда заметить, что общее количество вызовов рекурсии при вычислении функций invest и invest_1 будет равно n.