递归函数
This commit is contained in:
parent
4e9b24a0f1
commit
574abdefce
|
@ -6,4 +6,32 @@ module RecurseFunction
|
|||
|
||||
// 在F#中,声明一个递归函数与常规函数有些许不同,我们需要使用rec关键字进行描述
|
||||
// 如下
|
||||
let rec fact n = if n = 0 then 1 else n * fact n - 1
|
||||
let rec fact n =
|
||||
if n = 0 then
|
||||
1
|
||||
else
|
||||
n * fact n - 1
|
||||
|
||||
// 任何计算都需要一个确切的结果
|
||||
// 所以我们的递归需要一个结束条件
|
||||
// 如上:if n = 0 then 1
|
||||
// 即n为0时,该计算将确立结果为1
|
||||
|
||||
// 上面表达的是一个计算阶乘的函数
|
||||
// 对于一个阶乘,我们有
|
||||
// 0! = 1
|
||||
// 1! = 1 * 1
|
||||
// 2! = 2 * 1 -> 2 * (2 - 1)
|
||||
// 3! = 3 * 2 * 1 -> 3 * (3 - 1) * (3 - 1 - 1)
|
||||
// 发现上面的重复计算了吗
|
||||
// 在1到n之间的自然数中,已知0的阶乘有确切结果是1,而其他结果是n * (n - 1) * ((n - 1) - 1) * ...
|
||||
// 我们可以观察到n - 1的计算是重复的,因为每一个n都是上一个值 - 1
|
||||
// 可以得出1! = 1 * 1, 2! = 2 * 1!, 3! = 3 * 2!, 4! = 4 * 3!
|
||||
// 所以我们可以将其归纳为n = 0 -> 1 and n * (n - 1)!
|
||||
// 当然,我们上面的函数可以以一种表达力更强的描述(模式匹配)
|
||||
// 这里只是说一下有这种方式构建函数,了解一下
|
||||
|
||||
// 因为不能重复命名,所以使用了fact_f的名字
|
||||
let rec fact_f = function
|
||||
| 0 -> 1
|
||||
| n -> n * fact n - 1
|
Loading…
Reference in New Issue