Деньги к деньгам

Наверное смешно писать, что это гениально и, наверно, с практикой это приходит, но я пока не на этом уровне(( 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;
};

Если знаете, как еще можно зарефакторить - пишите!
И сорьки, у меня пока кодстайл в *опе

1 лайк

Круто! после 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;
};
1 лайк

Красивее ваш вариант, спасибо! Учту!

С капитализацией без всяких рекурсий

Сводка

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);
};