如何用Python递归实现指定图形的输出?
用Python递归实现分形树图形的方法
问题描述
我想用Python递归实现指定的分形图形,目前的思路是采用坐标法:顶层位于原点,左侧为x轴-1、y轴-1,右侧为x轴+1、y轴-1,以此类推。遍历第二层图形时,先将第三层放在左侧x轴位置,依此类推,但需注意每次遍历x轴时要减2,否则左右衔接处会重叠。我的现有代码如下:
def tree(): # for i in range(n): # pass x = [-2, -1, 0, 1, 2] y = [2, 1, 0, 1, 2] x_min = min(x) x = [item - x_min for item in x] print_tree(x, y) def print_tree(x, y): # size=len(x)*len(y) for i in range(max(y) + 1): new = "" for j in range(max(x) + 1): if (j, i) in zip(x, y): new += '*' else: new += ' ' print(new) tree()
递归实现方案
你的坐标法思路可行,要实现递归,核心是定义分形的递归规则:每一个图形单元都可分解为一个中心单元加上左右两个更小的同结构单元,且每个子单元的位置相对于父单元有固定偏移量。
1. 递归核心逻辑
- 终止条件:当递归深度达到设定层数(如
level=0),返回最基础的单元坐标。 - 递归扩展:每一层在基础单元的左右两侧,生成层级减1的子图形,通过
x±2、y+2的偏移量避免重叠。
2. 完整实现代码
def generate_fractal_coords(level, x_offset=0, y_offset=0): # 基础单元:十字形坐标(基于当前偏移原点) base_coords = [ (0 + x_offset, 0 + y_offset), (-1 + x_offset, 1 + y_offset), (1 + x_offset, 1 + y_offset), (-2 + x_offset, 2 + y_offset), (2 + x_offset, 2 + y_offset) ] if level == 0: return base_coords # 递归生成左侧子图形,偏移量:x-2,y+2 left_coords = generate_fractal_coords(level - 1, x_offset - 2, y_offset + 2) # 递归生成右侧子图形,偏移量:x+2,y+2 right_coords = generate_fractal_coords(level - 1, x_offset + 2, y_offset + 2) # 合并当前层与子层坐标 return base_coords + left_coords + right_coords def print_fractal(coords): # 计算坐标边界,确定画布范围 xs = [x for x, y in coords] ys = [y for x, y in coords] x_min, x_max = min(xs), max(xs) y_min, y_max = min(ys), max(ys) # 逐行绘制(y从大到小,保证图形从上到下输出) for y in range(y_max, y_min - 1, -1): line = "" for x in range(x_min, x_max + 1): line += '*' if (x, y) in coords else ' ' print(line) # 测试:生成3层分形图形(level=2对应第三层) if __name__ == "__main__": fractal_coords = generate_fractal_coords(2) print_fractal(fractal_coords)
3. 代码说明
generate_fractal_coords:递归生成所有*的坐标集合,通过偏移量控制子图形位置,避免重叠。print_fractal:根据坐标集合绘制图形,先计算坐标边界,再逐行遍历输出对应字符。- 修改
generate_fractal_coords的第一个参数level,可控制分形层数(level=0为基础单元,level=1为第二层图形,以此类推)。
内容的提问来源于stack exchange,提问作者Satellite_Chao
相关产品推荐
相关产品推荐

