如何在Rust

时间:2017-04-10 16:29:06

标签: recursion rust borrow-checker

我正在编写代码来迭代搜索递归数据结构,如下所示:

struct Tree {
    payload: i32,
    children: Vec<Box<Tree>>
}

假设我想走下树的每个左分支并修改遇到的每个节点。为简单起见,我不会包含任何终止条件。 Rust的借用检查规则不允许使用以下代码:

fn traverse(mut n: &mut Tree) {
    loop {
        n.payload += 1;
        n = n.children[0].as_mut();
    }
}

到目前为止,我发现表达此逻辑的唯一方法如下:

fn traverse(n: &mut Tree) {
    let mut stack: Vec<&mut Tree> = vec![n];
    while let Some(x) = stack.pop() {
        x.payload += 1;
        stack.push(x.children[0].as_mut())
    }
}

这样可行,但不必要的推/弹不是很优雅。

有没有更好的方法在没有安全Rust的情况下表达这种模式 使用递归?

0 个答案:

没有答案