分形的遞迴輸出
阿新 • • 發佈:2021-01-04
分形,具有以非整數維形式充填空間的形態特徵。通常被定義為“一個粗糙或零碎的幾何形狀,可以分成數個部分,且每一部分都(至少近似地)是整體縮小後的形狀”,即具有自相似的性質。
一個盒狀分形定義如下: 度為1的盒分形為:
X
度為2的盒分形為:
X X
X
X X
依次類推,如果B(n-1)表示n-1度的盒分形,則n度的盒分形遞迴定義如下:
B(n - 1) B(n - 1)
B(n - 1)
B(n - 1) B(n - 1)
請畫出度為n的盒分形的圖形
輸入格式:
輸入一系列度,每行給出一個不大於7的正整數。輸入的最後一行以-1表示輸入結束
輸出格式:
對於每個用例,輸出用’X’標記的盒狀分形。在每個測試用例後輸出包含一個短劃線“-”的一行。
輸入樣例:
1
2
3
4
-1
輸出樣例:
注意:每行的空格請輸出完整。
程式碼示例
#include <iostream>
#include<cmath>
using namespace std;
int cnt = 0;
char w[750][750];
void dfs(int n, int x, int y)
{
if (n == 1) { w[x][y] = 'X'; return; }
int m = pow(3, n - 2);
dfs(n - 1 , x, y);//查詢左上
dfs(n - 1, x + m, y + m);//查詢中間
dfs(n - 1, x + 2 * m, y);//查詢左下
dfs(n - 1, x, y + 2 * m);//查詢左上
dfs(n - 1, x + 2 * m, y + 2 * m);//查詢右下
}
int main()
{
int n;
int a[100],count=0;
while (~scanf("%d", &n) && n != -1)
{
a[count] = n;
count++;
}
for(int t=0;t<count; t++)
{
int k = pow(3, a[t] - 1);
for (int i = 0; i < k; i++)
for (int j = 0; j < k; j++)
w[i][j] = ' ';
for (int i = 0; i < k; i++)w[i][k] = '\0';
dfs(a[t], 0, 0);
for (int i = 0; i < k; i++)
puts(w[i]);
printf("-\n");
}
return 0;
}