我正在编写一个函数,它接受一个数字并返回它的阶乘。它有效,但为什么你必须在第二个for()语句的第一个参数上加“-1”?
var firstFactorial = function(num){
var numBreakdown = [];
var total = 1;
for(var i = 1; i <= num; i++){
numBreakdown.push(i);
}
for(var y = numBreakdown.length-1; y > 0; y--){
total *= numBreakdown[y]
}
console.log(total);
return total;
}
firstFactorial(7);
答案 0 :(得分:1)
Ryan在上述评论中解释了function factorial (n) {
if (n < 0) throw new TypeError('`n` must be non-negative')
var result = 1
while (n > 1) result *= n--
return result
}
console.log(factorial(0)) //=> 1
console.log(factorial(1)) //=> 1
console.log(factorial(7)) //=> 5040
井背后的原因:
数组索引从0到1小于长度。 ['first','second','third']有索引0,1和2.不知道为什么你要将数字存储在一个数组中相乘;你可以在第一时间乘以总数。
对于阶乘函数,大部分都是不必要的,包括使用数组来存储阶乘因子。请参阅下面的替代实施。
<?php
$conn = mysql_connect("localhost","root","");
mysql_select_db("bus",$conn);
$query = "SELECT * FROM booking";
$result = mysql_query($query);
$num_column = mysql_num_fields($result);
$csv_header = '';
for($i=0;$i<$num_column;$i++) {
$csv_header .= '"' . mysql_field_name($result,$i) . '",';
}
$csv_header .= "\n";
$csv_row ='';
while($row = mysql_fetch_row($result)) {
for($i=0;$i<$num_column;$i++) {
//echo $i; this and the next line doesnt execute
//echo '<script>myFunction()</script>';
$csv_row .= '"' . $row[$i] . '",';
}
$csv_row .= "\n";
}
/* Download as CSV File */
header('Content-type: application/csv');
header('Content-Disposition: attachment; filename=toy_csv.csv');
echo $csv_header . $csv_row;
exit;
?>
如果您想进一步澄清或对上述代码有疑问,请随时提出!
答案 1 :(得分:1)
这是因为,在数组中,最后一个元素的索引(位置)始终小于长度。你必须从长度为1的索引上的最后一个元素开始操作。
这是包含所有七个元素及其索引的数组。
numBreakdown=[1,2,3,4,5,6,7]
| | | | | | |
index:0,1,2,3,4,5,6
你可以看到访问元素7你必须使用numBreakdown [6]或numBreakdown [length-1],这里length = 7或numBreakdown [y],其中y = length-1。