面试题答案
一键面试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目前不支持自动的尾递归优化。