MATRIX-CHAIN-MULTIPLY(A, s, i, j) if i == j return A[i] if i + 1 == j return RECTANGULAR-MATRIX-MULTIPLY(A[i], A[j]) a = MATRIX-CHAIN-MULTIPLY(A, s, i, s[i, j]) b = MATRIX-CHAIN-MULTIPLY(A, s, s[i, j] + 1, j) return RECTANGULAR-MATRIX-MULTIPLY(a, b)
MATRIX-CHAIN-ORDER(p, n) let m[1 : n, 1 : n] and s[1 : n − 1, 2 : n] be new tables for i = 1 to n // chain length 1 m[i, i] = 0 for l = 2 to n // l is the chain length for i = 1 to n − l + 1 // chain begins at Ai j = i + l − 1 // chain ends at Aj m[i, j] = ∞ for k = i to j − 1 // try Ai:kAk+1:j q = m[i, k] + m[k + 1, j] + pi−1pk pj if q < m[i, j] m[i, j] = q // remember this cost s[i, j] = k // remember this index return m and s