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



我得到了一个请求以下内容的赋值:

编写函数sum:n:int->int它使用计数器值、本地可变值s和while循环来计算求和1+2+··+n为(2(。如果用小于1的任何值调用函数,则它为返回值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

为了进行比较,尾部递归版本:

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

最新更新