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

基于数组与栈的表达式递归求值及指定数组存储实现咨询

实现逐步迭代的表达式运算与结果存储

这其实是一个典型的逐步迭代式表达式求值需求,核心是按顺序累积运算结果并存储到数组中。我给你几种实现思路,包括最直观的迭代方式、递归方式,还有结合栈的实现,你可以根据自己的场景选择:

一、直观的迭代实现(最易理解)

这种方式直接按步骤处理操作数,逻辑清晰,适合大多数场景:

# 替换成你实际使用的操作数值或变量
a = 1  # 二进制 0001
b = 2  # 二进制 0010
c = 4  # 二进制 0100
d = 8  # 二进制 1000
e = 16 # 二进制 10000

# 把所有操作数整理到列表,方便遍历
operands = [a, b, c, d, e]
# 初始化存储中间结果的数组
result_arr = []

# 第一步:计算前两个操作数的|运算,存入数组索引0
if len(operands) >= 2:
    first_result = operands[0] | operands[1]
    result_arr.append(first_result)
    print(f"第一步:a|b = {first_result},存入result_arr[0]")

    # 从第三个操作数开始,依次和上一步结果运算
    for step_idx, current_op in enumerate(operands[2:]):
        # 当前结果要存入的数组索引是 step_idx + 1
        next_result = result_arr[-1] | current_op
        result_arr.append(next_result)
        print(f"第{step_idx+2}步:result_arr[{step_idx}] | {current_op} = {next_result},存入result_arr[{step_idx+1}]")
else:
    print("错误:操作数数量少于2,无法执行运算")

# 最终输出结果数组
print("\n最终结果数组:", result_arr)

逻辑说明:

  • 先把所有操作数放到列表中,统一管理
  • 优先处理前两个操作数的|运算,结果存入数组的第一个位置(索引0)
  • 遍历剩下的操作数,每一步都取数组的最后一个元素(也就是上一步的运算结果)和当前操作数执行|运算,把新结果追加到数组中,自动对应到下一个索引位置

二、递归实现(贴合你提到的递归求值需求)

如果必须用递归逻辑,我们可以通过递归函数逐步处理剩余的操作数,利用调用栈来维护运算顺序:

def recursive_eval(remaining_ops, result_arr=None):
    # 初始化结果数组(仅第一次调用时执行)
    if result_arr is None:
        result_arr = []
    
    # 递归终止条件:没有剩余操作数可处理
    if not remaining_ops:
        return result_arr
    
    # 第一次调用:处理前两个操作数
    if len(result_arr) == 0:
        if len(remaining_ops) >= 2:
            # 计算前两个操作数的结果
            current_res = remaining_ops[0] | remaining_ops[1]
            result_arr.append(current_res)
            # 递归处理剩下的操作数(从第三个开始)
            return recursive_eval(remaining_ops[2:], result_arr)
        else:
            return result_arr
    else:
        # 已有中间结果,取最后一个和当前第一个操作数运算
        current_res = result_arr[-1] | remaining_ops[0]
        result_arr.append(current_res)
        # 递归处理剩下的操作数
        return recursive_eval(remaining_ops[1:], result_arr)

# 调用递归函数
operands = [a, b, c, d, e]
recursive_result = recursive_eval(operands)
print("递归实现的结果数组:", recursive_result)

逻辑说明:

  • 递归函数接收两个参数:剩余待处理的操作数列表,以及当前的结果数组
  • 第一次调用时,先计算前两个操作数的结果并存入数组,然后递归处理剩下的操作数
  • 后续递归调用时,每次取结果数组的最后一个元素和当前第一个剩余操作数运算,将结果追加到数组后,继续递归处理剩下的操作数,直到没有剩余操作数为止

三、结合栈的实现(贴合你提到的栈需求)

栈的思路和迭代类似,我们可以用栈来维护中间结果(本质上递归也是利用了调用栈,这里是显式使用栈):

operands = [a, b, c, d, e]
result_arr = []
# 初始化栈,先存入前两个操作数
op_stack = [operands[0], operands[1]]

# 第一步:计算前两个操作数的结果
first_res = op_stack.pop() | op_stack.pop()
result_arr.append(first_res)
# 把第一步结果压入栈,作为后续运算的基础
op_stack.append(first_res)

# 处理剩下的操作数
for current_op in operands[2:]:
    current_res = op_stack.pop() | current_op
    result_arr.append(current_res)
    op_stack.append(current_res)

print("基于栈的结果数组:", result_arr)

逻辑说明:

  • 先将前两个操作数压入栈,弹出后计算|结果,存入数组并重新压入栈
  • 后续每个操作数,都弹出栈顶的中间结果,和当前操作数运算,将新结果存入数组并压回栈中,以此完成逐步累积运算

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:01:03