目的:递归是基本的算法思想和设计方法之一,也是数据结构重点讲授的部分,是许多算法的基础,对它们的理解和运用直接关系着其他算法的理解和应用。因此,熟练掌握递归是十分重要的。通过本题,应使学生加深对于递归方法的理解,提高运用递归解决问题的能力。
要求:分形是一种具有自相似性的现象,在分形中,每一组成部分都在特征上和整体相似,只不过仅仅是缩小了一些而已,一种盒子分形定义如下:
(1)规模为1的盒子分形为
X
(2)规模为2的盒子分形为
X X
X
X X
(3)若用B(n - 1)表示规模为n-1的盒子分形,则规模为n的盒子分形为
B(n - 1) B(n - 1)
B(n - 1)
B(n - 1) B(n - 1)
你的任务是,输出规模为n的盒子分形。例如,规模为3的盒子分形输出如下:
X X X X
X X
X X X X
X X
X
X X
X X X X
X X
X X X X
#include<iostream>
using namespace std;
#define MAX 1000
char maps[MAX][MAX];
void print(int n, int x, int y) {
if (n == 1) {
maps[x][y] = '*';//我们需要的形状
}
else {
int k = pow(3, n - 2);
//左上方的n-1度盒分形
print(n - 1, x, y);
//右上方的n-1度盒分形
print(n - 1, x + 2 * k, y);
//中间的n-1度盒分形
print(n - 1, x, y + 2 * k);
//左下方的n-1度盒分形
print(n - 1, x + k, y + k);
//右下方的n-1度盒分形
print(n - 1, x + 2 * k, y + 2 * k);
}
}
int main() {
int n;
cin >> n;
int size = pow(3, n - 1);
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
maps[i][j] =' ';
}
}
print(n, 0, 0);
//打印
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
cout << maps[i][j];
}
cout << endl;
}
system("pause");
return 0;
}