实现一个函数fractionSum(n),计算并返回以下序列的和:1/n + 1/(n−1)+ 1/(n−2)+⋅⋅⋅+ 1/2 + 1
例如,fractionSum(5)计算如下的和:1/5+1/4+1/3+1/2+1然后返回2.283333333333333
我甚至还没有开始写函数,因为我仍然在试图找出正确的循环表达式。这是我目前所做的:
var sum =0;
var fraction = 1;
var number = parseInt(prompt("Enter an integer: ", "5"));
for ( var counter = 0; counter <= number; counter++) {
fraction /= (number - counter); // do I need to declare parseFloat here for decimal# ?
sum += fraction;
}
document.write("The total value is " + sum);
与示例中的数字完全不匹配。我不知道这里出了什么问题。
我现在很困惑。我知道这是一个基本的问题,但我已经尝试了多个代码,它仍然不正确。
Thank you so much
您重用了前一次迭代中的分数,并将其除以下一个值。你需要一个新的分数:
fraction = 1 / (number - counter);
同时,在循环中需要严格的counter < number
条件来避免除零。
在循环中,counter必须小于number,否则在最后会被0除,结果将是无穷大。试试这个
let sum = 0;
let i = 0;
let num = parseInt(prompt("Enter an integer: ", "5"));
for(i; i < num; i++ ){
frac = 1 / ( num - i);
sum+= frac;
}
我明白了。这是我得到的:
<script>
function fractionSum(number) {
var sum =0;
for (var counter= 0 ; counter < number; counter++) {
sum += 1/(number - counter);
}
return sum;
}
var number = parseInt(prompt("Enter the value of n: ", "5"));
sum = fractionSum(number);
document.write("The fraction sum of order " + number + " is " + sum);
</script>
谢谢大家,这是非常有用的