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

如何用递归替代嵌套循环实现Connect 4 AI的位置遍历?

解决Connect 4 AI多层嵌套循环回溯问题的方案

栈模拟多层循环(高效且易读)

用栈手动模拟循环层级的状态,完全替代嵌套循环,既能保留原生循环的性能,又能大幅减少代码量,同时回溯逻辑清晰可控。

实现代码

import random

def simulate_7layer_loops(max_col=7):
    # 栈元素格式:(当前层级, 当前列索引)
    stack = [(0, 0)]
    
    while stack:
        level, idx = stack.pop()
        
        # 最后一层直接遍历剩余索引,执行核心逻辑
        if level == 6:  # 7层对应索引0-6
            for col in range(idx, max_col):
                # 替换为你需要的最后一层处理逻辑
                print(f"落子位置:层级{level+1},列{col+1}")
            continue
        
        # 非最后一层,从当前索引开始遍历列
        for col in range(idx, max_col):
            break_chance = random.randint(1, 5)
            if break_chance > 3:
                break  # 触发回溯,不再深入下一层
            
            # 记录当前层下一次遍历的起始索引,再压入下一层初始状态
            stack.append((level, col + 1))
            stack.append((level + 1, 0))
            break  # 进入下一层循环

# 调用模拟7层循环
simulate_7layer_loops()

方案优势

  • 性能接近原生嵌套:栈操作是底层逻辑,没有函数调用或递归的额外开销,和手写7层循环速度几乎一致。
  • 可扩展性强:如果后续需要调整层数,只需修改level == 6的判断条件,无需重构大量嵌套代码。
  • 回溯逻辑直观:通过栈的弹出和压入明确控制循环的进退,比递归更容易跟踪流程。

生成器版递归(适合遍历有效路径)

如果你的需求是遍历所有未被中断的完整7层落子组合,可改用生成器实现递归,解决之前递归回溯失效的问题:

实现代码

import random

def generate_valid_moves(levels=7, max_col=7):
    def backtrack(current_path):
        current_level = len(current_path)
        if current_level == levels:
            yield current_path
            return
        
        for col in range(max_col):
            break_chance = random.randint(1, 5)
            if break_chance > 3:
                break  # 中断当前层,回溯到上一级
            # 递归遍历下一层,用yield from传递结果
            yield from backtrack(current_path + [col])
    
    yield from backtrack([])

# 遍历所有有效落子路径
for move_path in generate_valid_moves():
    print(f"有效落子序列:{move_path}")

注:之前递归失效的原因大概率是没有正确使用yield from传递递归结果,这个版本通过生成器的迭代特性,能准确触发break回溯逻辑。

内容的提问来源于stack exchange,提问作者kxrosene

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 19:45:33