例如如何在用户输入 5 时计算 1+2+3+4+5 或当用户输入 7 时如何计算 1+2+3+4+5+6+7。我已经计划使用if 语句阻止计算 0 和负数... 我知道这是非常基本的,但我的导师无法帮助我,我想了解这个练习背后的代码是如何工作的。
答案 0 :(得分:1)
让我们试着把它分解成你会如何自己做。
如果我让你...
<块引用>计算所有正数之和直到 3
...你会:
1
开头并记下。2
,将其添加到之前的结果(1 + 2
)3
,将其添加到之前的结果(1 + 2 + 3
)最终结果是6
。
要实现这一点,您只需要我提供一条信息,upperLimit
。然后,您查看了 1
和 upperLimit
之间的所有值并将它们汇总。这相当于拥有一个函数,接受 upperLimit
作为参数,然后循环遍历该范围内的所有值并将它们相加:
Private Function SumUpTo(ByVal upperLimit As Integer) As Integer
' start at 0
Dim result As Integer = 0
' go through all values between 1 and upperLimit
For i = 1 To upperLimit
' add current value to result variable
result = result + i
Next
Return result
End Function
幸运的是,有一个公式可以用来在不遍历所有值的情况下获得相同的结果,称为“n
无穷级数的“1 + 2 + 3 + 4 + ⋯
th 部分和 em>":
n * (n + 1) / 2
(参考:1 + 2 + 3 + 4 + ⋯)
Private Function SumUpTo(ByVal upperLimit As Integer) As Integer
Return upperLimit * (upperLimit + 1) / 2
End Function
我不认为你的导师在寻找你的数学知识,而是你的算法思维,所以我相信他会寻找第一个解决方案,而不是后者。此外,您在另一个答案的评论中询问如何计算 1 * 2 * 3 * 4 * ⋯
;我想知道采用我的第一个解决方案并从字面上调整一个角色来实现这一目标是多么容易。
答案 1 :(得分:1)
一个简单的解决方案是使用 Enumerable.Range (documentation) 生成从 1 到 n 的数字范围,然后使用 Enumerable.Sum (documentation) 生成计算集合的总和。
这是一个例子:
Private Function CalculateSum(upper As Integer) As Integer
If (upper < 1) Then
Throw New ArgumentException("Value cannot be less than 1", NameOf(upper))
End If
Return Enumerable.Range(1, upper).Sum()
End Function
答案 2 :(得分:0)
也许这个会有所帮助? Stack post
您可以使用函数 f(n) = (n+1)n/2