循环Javascript循环和算法需要建议

时间:2015-11-10 17:59:24

标签: javascript loops

我需要帮助解决循环问题。 这个问题与提出使用for循环获得一个结果的方法有关。所以,例如,我可以改变20,每次都会给我一个不同的结果。如果我将数字20改为4,结果应该是40320.我无法绕过逻辑来理解这一点。还有另一种方法来编写变量以使其更简单吗?作为初学者,我需要关于for循环的建议。

 var number = 20;
 var i, prevResult, newResult;
 prevResult = 1;

   for (i = 1; i <= number - 1; i++) {
     // Calculate current result
         newResult = prevResult * (i + 1);

 // Set up the new result as the previous result
 prevResult = newResult;
}
console.log("FINAL RESULT: " + prevResult);

感谢您阅读,我希望收到您的来信!

2 个答案:

答案 0 :(得分:0)

有几个问题。

  • 首先你不需要prevResult和newResult。一个变量就足够了。
  • number - 1中减去1是不一致的,稍后在循环体中添加它。
  • i = i + 1可以写为i++,增量运算符
  • result = result * i可以写成result *= i
  • 因为i仅在循环内使用,所以在循环内声明它。

这将您的代码简化为:

var number = 20, result = 1; 
for (var i = 2; i <= number; i++)
{ // Calculate current result
    result *= i;
}
console.log("FINAL RESULT: " + result);

答案 1 :(得分:0)

你的问题仍然有点不清楚,但是你提到你的问题是&#39;抽象的循环&#39;。好吧,这个for循环不是抽象的,而是具体的。你的缩进有点偏离,所以让我们从你的代码的适当缩进开始:

var number = 20;
var i, prevResult, newResult;
prevResult = 1; 

for (i = 1; i <= number - 1; i++) {
    newResult = prevResult * (i + 1);
    prevResult = newResult;
}
console.log("FINAL RESULT: " + prevResult);

这里发生的是你首先声明一些变量供以后使用,其中包括number = 20,后面将重复你的for循环的循环次数。实际for循环由三部分组成:

  • 初始化:i = 1 - 使用i作为循环计数器,然后从1开始
  • 结束条件:i <= number - 1 - 只要i小于或等于number - 1 = 20 -1 = 19,就不断重复循环。请注意,这可以更容易地写为i < number
  • 循环结束语句:i++ - 在每个循环结束时,使用一个
  • 递增i

循环中的代码执行以下操作:

  • 第一次使用i = 1
    • newResult设为prevResult * (i + 1) = 1 * (1+1) = 2
    • prevResult设置为此新计算的值,即2
  • 第二次,由于循环语句结束,现在i已递增,因此i = 2
    • newResult设为prevResult * (i + 1) = 2 * (2+1) = 6
    • prevResult设置为新计算的值,即6
  • 所以它继续:
    • i = 3提供newResult = 6 * (3+1) = 24
    • i = 4提供newResult = 24 * (4+1) = 120
    • ...
  • i = 19时,循环执行以下操作:
    • newResult设为prevResult * (i + 1) = 121645100408832000 * (19 + 1) = 2432902008176640000
    • 并设置prevResult = 2432902008176640000
  • 现在循环语句结束,再次启动并递增ii = 20,但现在它会根据结束条件进行检查,并且20不小于或等于10,所以它停止执行循环,并且您的代码打印出20!
  • 的正确数字

因此,您的代码实际上正在运行,将number = 20更改为number = 4或类似代码会将其更改为计算4!而不是20!。所以问题仍然存在,对于这次执行,你有什么不清楚和抽象的东西?