MST

星途 面试题库

面试题:Rust模式匹配处理嵌套复杂数据结构

定义一个嵌套的数据结构,比如`enum Tree { Node(i32, Vec<Tree>), Leaf(i32) }`。编写一个函数,使用模式匹配来计算这个树状结构中所有节点值的总和。并且说明在处理这种嵌套结构的模式匹配时,需要注意哪些问题以避免栈溢出等风险。
11.9万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
enum Tree {
    Node(i32, Vec<Tree>),
    Leaf(i32)
}

fn sum_tree(tree: &Tree) -> i32 {
    match tree {
        Tree::Node(value, children) => {
            let child_sum: i32 = children.iter().map(sum_tree).sum();
            *value + child_sum
        },
        Tree::Leaf(value) => *value
    }
}

在处理这种嵌套结构的模式匹配时,为避免栈溢出风险,需注意:

  • 递归深度:如果树结构可能非常深,递归调用可能导致栈溢出。可以考虑将递归改为迭代实现,例如使用栈数据结构来模拟递归调用过程。
  • 尾递归优化:某些语言支持尾递归优化,即递归调用在函数的最后一步执行,编译器可以将其优化为循环,从而避免栈溢出。但Rust目前不支持自动的尾递归优化。