如果数量每天加倍,最有效的javascript算法计算总计

eve*_*ets 4 javascript

给N天,每天金额翻倍,这是实现这一目标的最有效方法吗?

第一天:给你$ .5.
第二天:你获得的金额是第一天1美元的两倍,现在你有1.5美元的
第三天:你获得的金额是第二天2美元的两倍,现在你有3.5美元
等等.

function calcit3()
{
  var cur_total = .5;
  var prev_total = 0;
  var days = 20;

  for ( z = 1; z < days; z++ )
  {
    cur_total = cur_total * 2;
    prev_total = cur_total;
  } 

  return (cur_total + prev_total);
}
Run Code Online (Sandbox Code Playgroud)

这纯粹是一种流行病.不是真的想要削减周期或任何东西.

谢谢.

编辑:

替代文字

Ano*_*on. 9

您提供的代码不符合描述所说的内容.

如果初始金额是a,那么你在第i天获得的金额是a * 2 ^ i,并且n天之后的金额是从0到n的总和.

简化,我们得到:

a * (2 ^ (n+1) - 1)
Run Code Online (Sandbox Code Playgroud)

不需要循环.


cas*_*nca 7

如果我正确地理解了这个问题,它只是一个简单的几何级数,从0.5开始,每天加倍.总数不过n是这个系列的总和,即:

a * (r^n - 1)
-------------
   r - 1
Run Code Online (Sandbox Code Playgroud)

在这里a = 0.5, r = 2; 替代产生公式:

0.5 * (2^n - 1)
Run Code Online (Sandbox Code Playgroud)

或者等效于JavaScript:

return 0.5 * (Math.pow(2, days) - 1);
Run Code Online (Sandbox Code Playgroud)