You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求将递归分形树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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 14:20:38