改善了一下方法


#include<iostream>
#include<math.h>
#include<stdio.h>
using namespace std;
//递归法
//迭代法一层一层的生成效率太慢
//递归图形相当于一棵树,既然这样直接递归判断i,j应该显示什么字母
//然后直接生成即可 
char GenerateMapGrid(int i,int j,char* Template,int templateSize,int scale){
	//最底层,直接返回对应字符 
	if(scale==1) return Template[i*templateSize+j];
	//上一层的单个空格,到下一层就是一大块空格,所以直接返回空格即可 
	int gridSize = pow(templateSize,scale-1);
	if(Template[i/gridSize*templateSize+j/gridSize]==' ') return ' ';
	//是有内容的,直接递归返回 
	return GenerateMapGrid(i%gridSize,j%gridSize,Template,templateSize,scale-1);
}
int main(){//习题2.4 北京大学 Repeater 
    int templateSize;
    int scale;
    string line;
	while(cin>>templateSize){
    	if(templateSize==0) break;
    	cin.ignore();//cin吃掉数字后还剩下一个\n 
    	
    	
   		char* Template = (char*)malloc(sizeof(char)*templateSize*templateSize); 
    	
    	//生成模版阵列 
    	for(int i=0;i<templateSize;i++){
	    	getline(cin,line);
	    	for(int j=0;j<templateSize;j++){
	    		Template[i*templateSize+j] = line[j];
                if(j>=line.size()){//牛客网的oj会吃掉getline字符串末尾的空格
                    Template[i*templateSize+j] = ' ';
                }
			}
		}
	
		//根据模版阵列生成字符阵列 
		cin>>scale;
		int mapSize = pow(templateSize,scale);
		
		char* map = (char*)malloc(sizeof(char)*mapSize*mapSize);
		for(int i=0;i<mapSize;i++){
			for(int j=0;j<mapSize;j++){
				map[i*mapSize+j] = GenerateMapGrid(i,j,Template,templateSize,scale);
			}
		}
	
		//打印字符阵列 
		for(int i=0;i<mapSize;i++){
			for(int j=0;j<mapSize;j++){
				printf("%c",map[i*mapSize+j]);
			}
			printf("\n");
		}
	}
    return 0;
}