使用 while 循环的 F# 阶乘函数

F# Factorial function using while loop

我收到了一项要求如下的作业:

写一个函数 总和:n:int -> 整数 它使用计数器值、本地可变值 s 和 while 循环来计算 将 1+2+···+n 求和为 (2)。如果以任何小于 1 的值调用函数,则它是 到 return 值 0.

现在我知道您可以使用 match 制作递归阶乘脚本,但我不太清楚如何使用 while 循环来完成同样的操作。

感谢任何帮助。

由于这是一道作业题,我不会只给出解决方案来回答,但我认为它会帮助您看到一个简短的片段,其中显示了您需要组合的所有结构:

let imperativeDemo y = // Define a function taking 'y' as an argument
  let mutable x = y    // Create a mutable variable 'x' initialized to 'y'
  while x < 20 do      // Loop while 'x' is less than 20
    x <- x + 1         // Mutate 'x' - increment it by one
  x                    // Return the final value of 'x'

这个函数没有做任何事情有用,但它应该很容易适应以实现阶乘函数所需的逻辑。

这对前 n 个整数求和(这不是阶乘函数!):

let sum n = 
    let mutable s = 0
    let mutable counter = n
    while counter > 0 do
        s <- s + counter
        counter <- counter - 1
    s

为了比较,tail-recursive版本:

let sumRec n = 
    let rec sumRecInner n accu = 
        if (n <= 0) then accu else
            sumRecInner (n - 1) (n + accu)
    sumRecInner n 0