我一直在尝试编写一个程序,它打印出一个阶乘而不实际使用递归。
这是代码
let factorial x =
let mutable n = x
while n > 0 do
let result = n*(n-1)
n <- (n-1)
result
问题在于,当我尝试运行代码时,它告诉我预期结果是一个单位,而输入显然是一个整数,这显然会导致错误。但是,我检查了所有变量,编译器将它们解释为整数,那么问题是什么
答案 0 :(得分:3)
您的代码存在以下几个问题,您必须牢记f#中的缩进非常重要,因为您希望代码应该是:
let factorial x =
let mutable n = x
let mutable result = 1
while n > 0 do
result <- n * (n-1)
n <- (n - 1)
result
您在result
范围内声明while
变量并将其返回到它之外。但是你的代码不正确,我冒昧地修改它,这就是我所做的:
let factorial x =
let mutable n = x
let mutable result = 1
while n >= 1 do
result <- result * n
n <- (n - 1)
result