2015-04-18 52 views
-1

我遇到了這個實現的問題。它給了我一個錯誤,「這個表達式具有類型布爾,但這裏有單位」在整個塊上從第一個for循環開始,並以pown表達式結束。遞歸計算N×N矩陣行列式

我不完全確定這是什麼意思。

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 
+6

'='是平等比較,'<-'是賦值。 – ildjarn

回答

2

<-是可變變量的賦值運算符。 你的代碼應該是

det <- m.[0, 0]

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

j2 <- j2 + 1

=是平等的,這就是爲什麼你所得到的 「這句話來有bool類型」 的錯誤。第二部分,「但這裏有單位」,意味着編譯器期望if的一個部分返回最後一個表達式中的單位。仔細閱讀本頁面,瞭解錯誤信息爲何如此混亂:https://msdn.microsoft.com/en-us/library/dd233231.aspx