\begin{algorithm}
        \caption{Strassen Matrix Multiplication}
        \begin{algorithmic}
        \INPUT Two $n \times n$ matrix $A$ and $B$ .
        \OUTPUT A $n \times n$ matrix $C = A \cdot B$ .
        \PROCEDURE{Strassen}{$A, B$}
            \IF {$n = 1$}
                \RETURN $[a_{11} \cdot b_{11}]$
            \ENDIF
            \STATE Let $C$ be a new $n \times n$ matrix.
            \STATE Partition $A$ into $\left[\begin{matrix}A_{11} & A_{12} \\ A_{21} & A_{22} \end{matrix}\right]$ , $B$ into $\left[\begin{matrix}B_{11} & B_{12} \\ B_{21} & B_{22} \end{matrix}\right]$ and $C$ into $\left[\begin{matrix}C_{11} & C_{12} \\ C_{21} & C_{22} \end{matrix}\right]$ .
            \STATE \COMMENT{$A_{ij}, B_{ij}, C_{ij}$ are $n/2 \times n/2$ matrixs.}
            \STATE
            \STATE \COMMENT{calculate ten matrixs of addition or substraction.}
            \STATE $S_1 = B_{12} - B_{22}$ , $S_2 = A_{11} + A_{12}$ , $S_3 = A_{21} + A_{22}$ , $S_4 = B_{21} - B_{11}$
            \STATE $S_5 = A_{11} + A_{22}$ , $S_6 = B_{11} + B_{22}$ , $S_7 = A_{12} - A_{22}$ , $S_8 = B_{21} + B_{22}$
            \STATE $S_9 = A_{11} - A_{21}$ , $S_{10} = B_{11} + B_{12}$
            \STATE
            \STATE \COMMENT{calculate seven matrixs of product.}
            \STATE $P_1 = $ \CALL{Strassen}{$A_{11}, S_1$} , $P_2 = $ \CALL{Strassen}{$S_2, B_{22}$}
            \STATE $P_3 = $ \CALL{Strassen}{$S_3, B_{11}$} , $P_4 = $ \CALL{Strassen}{$A_{22}, S_4$}
            \STATE $P_5 = $ \CALL{Strassen}{$S_5, S_6$} , $P_6 = $ \CALL{Strassen}{$S_7, S_8$}
            \STATE $P_7 = $ \CALL{Strassen}{$S_9, S_{10}$}
            \STATE
            \STATE \COMMENT{calculate the result}
            \STATE $C_{11} = P_5 + P_4 - P_2 + P_6$
            \STATE $C_{12} = P_1 + P_2$
            \STATE $C_{21} = P_3 + P_4$
            \STATE $C_{22} = P_5 + P_1 - P_3 - P_7$
            \STATE
            \RETURN $C$
        \ENDPROCEDURE
        \end{algorithmic}
        \end{algorithm}