如果我有这个 Haskell 函数:
考虑以下 Haskell 函数f:
f :: Int -> Int f 0 = 1 f x = x * x * f (x - 1)
那么如何计算它的固定点和最小固定点(封闭形式)?
这个问题的答案是:
这个最小固定点是如何计算的?我试图理解这一点,但仍然没有运气。如果有人可以向我解释这一点,那就太好了。
如果我有这个 Haskell 函数:
考虑以下 Haskell 函数f:
f :: Int -> Int f 0 = 1 f x = x * x * f (x - 1)
那么如何计算它的固定点和最小固定点(封闭形式)?
这个问题的答案是:
这个最小固定点是如何计算的?我试图理解这一点,但仍然没有运气。如果有人可以向我解释这一点,那就太好了。
很容易看出
f x = x * x * f (x-1)
= x * x * ((x-1) * (x-1) * f (x-2))
= x * x * ((x-1) * (x-1) * ((x-2) * (x-2) * f (x-3)))
= ...
= x * x * ((x-1) * (x-1) * ((x-2) * (x-2) * ... * 1)))
(x!)^2
现在要在评论中回答您的问题,即当递归结果未平方时,这如何等同于给定公式,只需使用overf (x-1)
的关联性和交换性重新排列上述因素:(*)
Int
x * x * ((x-1) * (x-1) * ((x-2) * (x-2) * ... * 1)))
= x * x * (x-1) * (x-1) * (x-2) * (x-2) * ... * 1
= (x * (x-1) * (x-2) * ... * 1) * (x * (x-1) * (x-2) * .. * 1)
= x! * x!
= (x!)^2