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

如何用递归实现支持任意长度的多层嵌套循环与赋值(向量位运算场景)

用递归实现任意长度向量的位逻辑匹配

核心思路

递归的关键是逐层处理相邻的vector_set对,每次递归时维护两个核心状态:

  • 当前累积的位运算结果current_d
  • 已经填充的values数组

一旦找到满足d2.sum() == 0的索引组合,就立即给values赋值,并递归处理下一组vector_set,直到遍历完所有需要处理的组或找到有效解。

递归实现代码

import numpy as np

def find_matching_indices(vector_setS, current_idx, current_d, values):
    # 终止条件:所有相邻vector_set对处理完成
    if current_idx >= vector_setS.shape[0] - 1:
        return True
    
    # 确定当前r的遍历范围:首次遍历全量256个值,后续复用已确定的values值
    r_range = range(256) if current_idx == 0 else [values[-(current_idx + 2)]]
    
    for r in r_range:
        for a in range(256):
            # 计算当前组合的位运算结果
            combined_vec = np.bitwise_and(vector_setS[current_idx, r], vector_setS[current_idx+1, a])
            new_d = np.bitwise_and(current_d, combined_vec)
            
            if new_d.sum() == 0:
                # 赋值到values对应位置
                values[-(current_idx + 2)] = r
                values[-(current_idx + 1)] = a
                
                # 递归处理下一组vector_set
                if find_matching_indices(vector_setS, current_idx + 1, new_d, values):
                    return True  # 找到有效解后直接回溯返回
    return False  # 当前分支无有效解

调用示例(适配任意长度DO)

# 示例:DO长度为4的情况(和你原代码一致)
DO = [137,80,78,71]
values = np.zeros(len(DO), dtype=np.uint8)
vector_setS = np.zeros((len(DO)-2, 256, 8192), dtype=np.uint8)
A = np.ones(8192, dtype=np.uint8)
B = np.zeros(8192, dtype=np.uint8)

initial_d = np.bitwise_and(A, B)
found = find_matching_indices(vector_setS, 0, initial_d, values)

if found:
    print("符合条件的索引组合:", values)
else:
    print("未找到有效组合")

适配任意长度的说明

  • 不管DO的长度是多少,vector_setS的形状会自动变为(len(DO)-2, 256, 8192),递归函数会根据这个形状自动处理所有需要的层级,不需要手动添加for循环。
  • 递归过程中,values数组会被实时修改,找到有效组合时会直接填充对应位置的索引。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 11:45:31