我正在尝试使用while循环来减少计数器,然后在条件语句中对其进行评估。
例如,此代码将导致6
var counter = 3;
var factorial = 1;
while (counter)
factorial *= counter--;
console.log(factorial);
虽然这导致0
var counter = 3;
var factorial = 1;
while (counter--)
factorial *= counter;
console.log(factorial);
答案 0 :(得分:5)
var counter = 3;
var factorial = 1;
while (counter--)
factorial *= counter;
console.log(factorial);
在更改计数器之前评估while条件。 所以在第一个循环中,你评估3并传递vaue 2进行乘法运算。 然后你评估2> 0,你将1传递给乘法,因为counter--表示首先使用当前值,并在值减1后立即使用。
因此,在下一步中,您将评估if(1)哪个为true但是传递0,因此乘法的结果为0。 然后while循环将无法通过评估,因为计数器将是一个假值,如0
答案 1 :(得分:2)
不同之处在于,当您在条件中递减时,那么在循环体中,该值已经递减。
预先计算,以便在counter
到达0
时中断循环,并将factorial
初始化为counter
。
var counter = 3; // Infinite loop if `counter <= 0`
var factorial = counter;
while (--counter)
factorial *= counter;
console.log(factorial);
&#13;
如果您仍希望将其初始化为do...while
1
循环
var counter = 3; // Infinite loop if `counter < 0`
var factorial = 1;
do factorial *= counter;
while (--counter);
console.log(factorial);
&#13;
答案 2 :(得分:0)
你不能这样减少。你基本上是写作。
while (counter)
factorial *= counter -= 1;
这是完全错误的。你想要
while (counter > 0) {
factorial *= counter;
counter--;
}
答案 3 :(得分:0)
基于初始示例代码和在for循环中评估变量之前递减变量gulp.task('build-vendor',function(){
var concat = require("gulp-concat");
gulp.src([
'node_modules/core-js/client/shim.min.js',
'node_modules/zone.js/dist/zone.js',
'node_modules/reflect-metadata/Reflect.js',
'node_modules/systemjs/dist/system.src.js'
])
.pipe(uglify())
.pipe(concat("vendor.min.js"))
.pipe(gulp.dest("./bundles/"))
})
的问题,我提出了这个解决方案:
counter
如您所见,计数器在评估之前会减少。
然而,反馈是,它现在给出了错误的结果&#34;。
所以在这篇更新的帖子中,我想介绍一下我编写递归因子函数的方法。计算的阶乘存储在var counter = 3;
var factorial = 1;
while (--counter)
factorial *= counter;
console.log(factorial);
变量中,因此不必反复计算中间值。
f
答案 4 :(得分:0)
听起来你想要减量运算符的前缀版本,例如
while (--counter)
如果使用了前缀(例如, - x),则它会在递减后返回值。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators
答案 5 :(得分:0)
如果您想根据需要输出,请使用下面的代码
var counter = 3;
var factorial = 1;
while ( x = counter--)
factorial *= x
console.log(factorial);
Output : 6
**Explanation :**
let x = 3;
var p = x--; // here, p = 3 and x = 2
so, in your parameter you passed 2 instead of 3 that's why giving a wrong ans .
答案 6 :(得分:0)
这基本上是后期和预先减少之间的差异以及评估的地点。
当你写\n
时,它会返回x的当前值,然后递减它。与此相反,预增量/递减立即返回递增/递减值。
当评估x--
条件时,计数器会在那里递减,所以在循环体中你已经修改了计数器值。这不同于while
,其中计数器在计算阶乘后递减(因为后递减)。
为了了解它在实践中的运作方式,请参阅以下示例:
factorial *= counter--;
var counter = 3;
var factorial = 1;
while (counter) {
console.log("Counter value before:" + counter);
factorial *= counter--;
console.log("Counter value after:" + counter);
}
console.log(factorial);
为了与原始示例中的行为相同,您可以使用预先创建(var counter = 3;
var factorial = 1;
while (counter--) {
console.log("Counter value:" + counter);
factorial *= counter;
}
console.log(factorial);
)将while
循环重写为do { } while
:
--counter