请求将递归分形树Python代码改写为迭代实现
迭代实现分形树(与递归版本效果完全一致)
递归版本的分形树依赖调用栈保存上下文,我们可以手动用栈来模拟这个过程,每个栈元素记录当前分支长度和执行阶段,以此还原递归的执行顺序和状态切换。
以下是迭代实现的完整代码:
import turtle def tree_iterative(branchLen, t): # 栈元素格式:(当前分支长度, 执行阶段) # 阶段0:刚进入节点,执行forward、右拐,准备处理左子树 # 阶段1:左子树处理完成,执行变蓝、左拐,准备处理右子树 # 阶段2:右子树处理完成,执行变红、右拐、backward stack = [(branchLen, 0)] while stack: current_len, phase = stack.pop() if current_len <= 1: continue if phase == 0: # 执行递归第一步:前进,右拐 t.forward(current_len) t.right(20) # 先压入当前节点的下一阶段(处理完左子树后要做的操作) stack.append((current_len, 1)) # 压入左子树的初始阶段 stack.append((current_len - 10, 0)) elif phase == 1: # 左子树处理完,执行变蓝、左拐 t.color("blue") t.left(40) # 压入当前节点的下一阶段(处理完右子树后要做的操作) stack.append((current_len, 2)) # 压入右子树的初始阶段 stack.append((current_len - 10, 0)) elif phase == 2: # 右子树处理完,执行变红、右拐、后退 t.color("red") t.right(20) t.backward(current_len) def main(): t = turtle.Turtle() myWin = turtle.Screen() t.left(90) t.up() t.backward(100) t.down() t.color("green") tree_iterative(40, t) myWin.exitonclick() main()
说明
- 栈的使用严格对应递归的调用顺序:每次处理子树前,先把当前节点后续需要执行的操作压入栈,再压入子树的初始状态,保证子树先执行(栈是后进先出)。
- 阶段标记确保了每个节点在子树处理完成后,能正确执行后续的颜色切换、转向和后退操作,完全复刻递归版本的执行流程。
内容的提问来源于stack exchange,提问作者Jeffrey Turner
相关产品推荐
相关产品推荐

