1. 程式人生 > 其它 >分形的遞迴輸出

分形的遞迴輸出

技術標籤:c++演算法程式碼演算法c++

分形,具有以非整數維形式充填空間的形態特徵。通常被定義為“一個粗糙或零碎的幾何形狀,可以分成數個部分,且每一部分都(至少近似地)是整體縮小後的形狀”,即具有自相似的性質。

一個盒狀分形定義如下: 度為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; }