| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 514 人关注过本帖
标题:帮帮忙 帮我把在这个代码改成递归的
只看楼主 加入收藏
灬xiaoning
Rank: 2
等 级:论坛游民
帖 子:27
专家分:10
注 册:2010-7-24
结帖率:75%
收藏
 问题点数:0 回复次数:0 
帮帮忙 帮我把在这个代码改成递归的
由于本人 感冒 没学好递归
  请大家帮帮忙



#include<stdio.h>
int pass;
typedef struct Corner
{
    int a,b,c,d
};
typedef struct Array
{
    int a[100][100],b[100][100],c[100][100],d[100][100];
};
int GetCorner(int m[100][100],int n)
{
    int flag=0,mid=n/2+1;
    if(n%2!=0){
        if(mid%2!=0 || pass==0){
            if(flag++==0){
                Corner corner;
                corner.a =m[0][0];
                corner.b =m[0][n-1];
                corner.c =m[n-1][0];
                corner.d =m[n-1][n-1];
                printf("%d %d %d %d\n",corner.a,corner.b,corner.c,corner.d);
            }
            if(flag++==1){
                Corner corner;
                corner.a =m[0][0];
                corner.b =m[0][mid-1];
                corner.c =m[mid-1][0];
                corner.d =m[mid-1][mid-1];
                printf("%d %d %d %d\n",corner.a,corner.b,corner.c,corner.d);

            }
            if(flag++==2){
                Corner corner;
                corner.a =m[0][mid-1];
                corner.b =m[0][mid*2-2];
                corner.c =m[mid-1][mid-1];
                corner.d =m[mid-1][mid*2-2];
                printf("%d %d %d %d\n",corner.a,corner.b,corner.c,corner.d);
            }   
            if(flag++==3){
                Corner corner;
                corner.a =m[mid-1][0];
                corner.b =m[mid-1][mid-1];
                corner.c =m[mid-1][0];
                corner.d =m[mid*2-2][mid-1];
                printf("%d %d %d %d\n",corner.a,corner.b,corner.c,corner.d);
            }
            if(flag++==4){
                Corner corner;
                corner.a =m[mid-1][mid-1];
                corner.b =m[mid-1][mid*2-2];
                corner.c =m[mid*2-2][mid-1];
                corner.d =m[mid*2-2][mid*2-2];
                printf("%d %d %d %d\n",corner.a,corner.b,corner.c,corner.d);
            }
        }
    }
    return 0;
}
int Div_and_Put_Array(int A[100][100],int n)
{   
    Array sz;
    int i,j;
    while(n/2>1){
        for(i=0;i<=n/2;i++)
            for(j=0;j<=n/2;j++)
                sz.a [i][j]=A[i][j];
        GetCorner(sz.a ,n/2+1);        
        for(i=0;i<=n/2;i++)
            for(j=n/2;j<=n-1;j++)
                sz.b [i][j-n/2]=A[i][j];
        GetCorner(sz.b ,n/2+1);
        for(i=n/2;i<=n-1;i++)
            for(j=0;j<=n/2;j++)
                sz.c [i-n/2][j]=A[i][j];
        GetCorner(sz.c ,n/2+1);
        for(i=n/2;i<=n-1;i++)
            for(j=n/2;j<=n-1;j++)
                sz.d [i-n/2][j-n/2]=A[i][j];
        GetCorner(sz.d ,n/2+1);
        n/=2;
    }
    return 0;
}
int main()
{
    int  i,j,t,n;//n<=100
    int  Matrix[100][100];
    while(scanf("%d",&n)){
        if(n!=1){
            t=1;
            pass=0;
            if(n%2!=0){
                for(i=0;i<n;i++){
                    for(j=0;j<n;j++)
                        Matrix[i][j]=t++;
                }
                GetCorner(Matrix,n);
                Div_and_Put_Array(Matrix,n);
            }
        }
    }
    return 0;
}
搜索更多相关主题的帖子: 递归 代码 
2010-07-27 11:28
快速回复:帮帮忙 帮我把在这个代码改成递归的
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029141 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved