Наверное смешно писать, что это гениально и, наверно, с практикой это приходит, но я пока не на этом уровне(( 3 дня пыталась…
return возвращает значение не дожидаясь окончания цикла, на первой же итерации, time я не заметил чтобы менялся у вас в коде, так что думаю если бы не return. то цикл был бы вечным
я это решение не за 5 минут написал, часик попотел. Практика решает в любом случае, я сейчас тоже сижу над задачей, который день не могу решить)) программирование оно такое
Да, вы правы, я попробовала изменить на > -1 и он ушел в бесконечную петлю(
Спасибо за поддержку) Буду развивать абстрактное мышление)
Не понимаю, мне кажется, все немного усложняют. Как финансист, быстренько вспомнила (а можно было загуглить) формулу сложных процентов. Ну и я потом поискала как степень поставить и все такое… Вышло вот что:
var calculateDeposit = function (startingSum, percent, term, arePercentsCapitalized) {
var finishingSum;
var monthlyPercent = percent/100/12;
if (arePercentsCapitalized) {
finishingSum = Math.round(startingSum * Math.pow(1 + monthlyPercent, term));
} else {
finishingSum = Math.round(startingSum * (1 + monthlyPercent * term));
};
return finishingSum;
};
Если знаете, как еще можно зарефакторить - пишите!
И сорьки, у меня пока кодстайл в *опе
Круто! после If с esle точка с запятой не нужна
Сделал более короткий ваш вариант, но не скажу что он лучше) просто короче
var calculateDeposit = function (startAmount, percent, term, isCapitalized) {
var monthlyPercent = percent/100/12;
var depositCapatalized = Math.round(startAmount * Math.pow(1 + monthlyPercent, term));
var depositNoCapatalized = Math.round(startAmount * (1 + monthlyPercent * term));
return isCapitalized ? depositCapatalized : depositNoCapatalized;
};
Красивее ваш вариант, спасибо! Учту!
С капитализацией без всяких рекурсий
Сводка
const culculatePercent = percent => percent / 12 / 100;
const calculateDeposit = (deposit, percent, months, isCapitalized) => {
const percentYear = culculatePercent(percent)
if (isCapitalized) {
let capDeposit = deposit;
let sumPercent = 0;
for (let i = months; i > 0; i--) {
capDeposit += percentYear * capDeposit;
}
return Math.floor(capDeposit);
}
return Math.floor(percentYear * months * deposit + deposit);
};
Моё решение:
Сводка
let calculateDeposit = function (startDepo, percent, period, isCapitalization) {
let depo = startDepo
if (isCapitalization) {
for (let i = 1; i <= period ; i++) {
depo += depo * percent / 100 / 12
}
} else {
depo += startDepo * percent / 100 / 12 * period
}
return Math.floor(depo)
};
let calculateDeposit = function (startSum, percent,time, capitalization) {
percent /= 100;
if(capitalization) {
for(var i = 1; i <= time; i++) {
startSum += startSum * (percent/12);
}
}
else {
startSum += startSum * (percent/12*time);
}
return Math.floor(startSum);
}
let calculateDeposit = function (deposit, percent, months, capitalization) {
let summa;
if(capitalization){
let capDeposit = 0;
for(let i = 1; i <= months; i++){
capDeposit += (deposit + capDeposit) / 100 * percent / 12;
}
summa = deposit + capDeposit;
}else{
summa = (deposit / 100 * percent / 12 * months) + deposit;
}
return Math.floor(summa);
};