Javascript:因子函数有效,但我想知道其内部语句的必要性

时间:2017-02-26 02:03:36

标签: javascript

我正在编写一个函数,它接受一个数字并返回它的阶乘。它有效,但为什么你必须在第二个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);

2 个答案:

答案 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。