2016-08-13 45 views
0

如果我有這樣的Haskell功能:查找功能至少不動點

考慮下面的Haskell函數˚F

f :: Int -> Int 
f 0 = 1 
f x = x * x * f (x - 1) 

那我該怎麼計算出它的不動點最少固定點(封閉形式)?

回答這個問題是:

enter image description here

這是怎麼至少不動點計算?我試圖理解這一點,但仍然沒有運氣。如果有人能夠向我解釋這一點,這將是非常棒的。

+4

張貼,它的底部,因爲該功能是嚴格的。但我想你可能實際上需要0-> 1的相關函數'\ f n - > n的最小固定點; (Int - > Int) - >(Int - > Int)'類型的x-> x * x * f(x-1)',並且具有非平凡的最小不動點。 – chi

+0

@chi然後什麼將是最不動的點,就像我理解如何定義類型,但是如何以封閉的形式寫LFP。 –

+3

是不是1? f 1 = 1 * 1 * f(0)= 1。在所有其他整數f x不同於x,所以1是唯一的固定點。 –

回答

0

不難看出,

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當遞歸結果f (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