首页 > 学院 > 开发设计 > 正文

矩阵乘法的递归算法

2019-11-06 08:50:06
字体:
来源:转载
供稿:网友
#include<stdio.h>#define N 2void 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");    }}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表