矩阵乘法的递归算法

#include<stdio.h>

#define N 2

void matrix_multiply(int a[][N],int ia,int ja,int b[][N],int ib,int jb,int c[][N],int ic,int jc,int n)

{

    

    if(n==1)

        c[ic][jc]+=a[ia][ja]*b[ib][jb];

    else

    {

        matrix_multiply(a,ia    ,ja    ,b,ib    ,jb    ,c,ic    ,jc,n/2);

        matrix_multiply(a,ia    ,ja+n/2,b,ib+n/2,jb    ,c,ic    ,jc    ,n/2);

        

        matrix_multiply(a,ia    ,ja    ,b,ib    ,jb+n/2,c,ic    ,jc+n/2,n/2);

        matrix_multiply(a,ia    ,ja+n/2,b,ib+n/2,jb+n/2,c,jc    ,jc+n/2,n/2);

        

        matrix_multiply(a,ia+n/2,ja    ,b,ib    ,jb    ,c,ic+n/2,jc    ,n/2);

        matrix_multiply(a,ia+n/2,ja+n/2,b,ib+n/2,jb    ,c,ic+n/2,jc    ,n/2);

    

        matrix_multiply(a,ia+n/2,ja    ,b,ib    ,jb+n/2,c,ic+n/2,ic+n/2,n/2);

        matrix_multiply(a,ia+n/2,ja+n/2,b,ib+n/2,jb+n/2,c,ic+n/2,jc+n/2,n/2);

    }

}

int main()

{

    int n=N;

    int a[n][n];

    int c[n][n];

    int i,j;

    for(i=0;i<n;i++)

    {

        for(j=0;j<n;j++)

        {

            a[i][j]=i*n+j;

            c[i][j]=0;

        }

    }

    printf(“A:\n”);

    for(i=0;i<n;i++)

    {

        for(j=0;j<n;j++)

        {

            printf(“%d “,a[i][j]);

        }

        printf(“\n”);

    }

    

    matrix_multiply(a,0,0,a,0,0,c,0,0, n);

    

    printf(“matrix_multiply:\n”);

    for(i=0;i<n;i++)

    {

        for(j=0;j<n;j++)

        {

            printf(“%d “,c[i][j]);

        }

        printf(“\n”);

    }

}

    原文作者:递归算法
    原文地址: https://blog.csdn.net/limengjuhanxin/article/details/58706659
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞