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

如何扩展递归逻辑或用Python函数生成n×n的0-1二维数组全组合?

生成n×n的0-1二维数组方案

一、基于现有递归逻辑扩展

你现有的一维递归代码核心是遍历每个位置,依次尝试0和1的取值。要扩展到二维数组,有两种递归思路:

思路1:将二维数组转为一维处理

把n×n的二维数组看作长度为n²的一维数组,用原递归逻辑生成所有一维组合后,再拆分成二维结构:

def generate_all_2d_spin_configs(n):
    def helper(total, arr, l, i):
        if i == total:
            # 将一维数组拆分为n行n列的二维数组
            two_d_arr = [arr[i*n : (i+1)*n] for i in range(n)]
            l.append(two_d_arr)
            return
        arr[i] = 0
        helper(total, arr, l, i+1)
        arr[i] = 1
        helper(total, arr, l, i+1)
        return l
    
    total_elements = n * n
    arr = [None] * total_elements
    result = []
    return helper(total_elements, arr, result, 0)

# 示例调用:生成2×2的所有0-1二维数组
n = 2
configs = generate_all_2d_spin_configs(n)
for cfg in configs:
    print(cfg)

思路2:直接递归遍历二维位置

直接针对二维数组的行和列索引进行递归,逐个位置填充0或1:

def generate_all_2d_spin_configs(n):
    def helper(row, col, current_arr, result):
        if row == n:
            # 所有行填充完成,添加当前数组的副本
            result.append([r[:] for r in current_arr])
            return
        # 尝试当前位置设为0
        current_arr[row][col] = 0
        # 计算下一个位置:列满则换行,否则同列前进
        next_col = col + 1
        next_row = row
        if next_col == n:
            next_row = row + 1
            next_col = 0
        helper(next_row, next_col, current_arr, result)
        
        # 尝试当前位置设为1
        current_arr[row][col] = 1
        helper(next_row, next_col, current_arr, result)
    
    # 初始化空的二维数组框架
    initial_arr = [[None for _ in range(n)] for _ in range(n)]
    result = []
    helper(0, 0, initial_arr, result)
    return result

# 示例调用
n = 2
configs = generate_all_2d_spin_configs(n)
for cfg in configs:
    print(cfg)

二、用Python标准库简化实现

如果不想自己写递归,可以用itertools.product生成笛卡尔积,一步到位生成所有组合:

import itertools

def generate_all_2d_spin_configs(n):
    # 生成所有长度为n²的0-1组合(以元组形式返回)
    one_d_combinations = itertools.product([0, 1], repeat=n*n)
    # 将每个一维组合转换为二维数组
    two_d_configs = []
    for combo in one_d_combinations:
        two_d_arr = [list(combo[i*n : (i+1)*n]) for i in range(n)]
        two_d_configs.append(two_d_arr)
    return two_d_configs

# 示例调用
n = 2
configs = generate_all_2d_spin_configs(n)
for cfg in configs:
    print(cfg)

itertools.product是C实现的标准库函数,效率比纯Python递归更高,代码也更简洁,适合大多数场景。

注意:当n较大时(比如n≥4),总组合数会达到2^(n²),内存消耗会急剧上升,这是所有方案都无法避免的问题,使用时需注意n的取值范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:09:25