我得到了一个请求以下内容的赋值:
编写函数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