C++编写分形问题


目的:递归是基本的算法思想和设计方法之一,也是数据结构重点讲授的部分,是许多算法的基础,对它们的理解和运用直接关系着其他算法的理解和应用。因此,熟练掌握递归是十分重要的。通过本题,应使学生加深对于递归方法的理解,提高运用递归解决问题的能力。

要求:分形是一种具有自相似性的现象,在分形中,每一组成部分都在特征上和整体相似,只不过仅仅是缩小了一些而已,一种盒子分形定义如下:

(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
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;

}



C++编写分形问题_第1张图片

你可能感兴趣的:(C++)