递归地计算N×N矩阵行列式

时间:2015-04-18 02:12:25

标签: f#

我对此实施有疑问。它给了我一个错误"这个表达式有类型bool但是这里有单位"在整个块上从第一个for循环开始,以pown表达式结束。

我不完全确定这意味着什么。

let rec detMat (m : int[,] ) : int = 
    let mutable det = 0
    let mutable n = m.Length
    let mutable i = 0
    let mutable j = 0
    let mutable j = 0
    let mutable j1 = 0
    let mutable j2 = 0
    let mTmp = Array2D.create 0

    if n  = 1 then
        det = m.[0, 0]
    elif n = 2 then
        det = m.[0, 0] * m.[1, 1] - m.[1, 0] * m.[0, 1]
    else
        det = 0
        for j1 = 0 to n do
            for i = 1 to n do
                j2 = 0
                for j = 0 to n do
                    if j <> j1 then
                        mTmp.[i-1, j2] <- m.[i, j]
                        j2 = j2 + 1
            pown -1 (1 + j1 + 1) * m.[0, j1] * detMat(mTmp, n-1)
    det

1 个答案:

答案 0 :(得分:2)

<-是可变变量的赋值运算符。 你的代码应该是

det <- m.[0, 0]

det <- m.[0, 0] * m.[1, 1] - m.[1, 0] * m.[0, 1]

j2 <- j2 + 1

=是为了平等,这就是为什么你得到&#34;这个表达式有类型bool&#34;错误。第二部分,&#34;但这里有unit&#34;,表示编译器期望if的一个臂返回最后一个表达式中的一个单元。仔细阅读此页面以了解错误消息为何如此混乱的原因:https://msdn.microsoft.com/en-us/library/dd233231.aspx