使用 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
我收到了一项要求如下的作业:
写一个函数 总和: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