比如力扣的子集这个题,如果用递归的方法,我的想法是这样写的:
impl Solution {
pub fn subsets(nums: Vec<i32>) -> Vec<Vec<i32>> {
let mut res = Vec::new();
let mut temp = Vec::new();
let n = nums.len();
let dfs = |start: usize| {
res.push(temp.clone());
for i in start..n {
temp.push(nums[i]);
dfs(i + 1);
temp.pop();
}
};
dfs(0);
res
}
}
但是编译报错找不到dfs(i + 1);
这行的dfs,如果不捕获变量的话,用fn就可以了,但是这里需要,所以想问一下有没有什么方法可以做到让闭包递归?
1
共 4 条评论, 1 页
评论区
写评论我觉得应该是涉及了多次可变借用
--
👇
xie-jirong: 递归的本质要在栈上操作一层一层的参数(反映每次的状态), 如果数据被闭包捕获了,是否相当于“全局变量“,是不是跟递归的理念就违背了?
还是,如果是”可变借用“,那么,递归就涉及多次可变借用了,也与内存安全的设计要求冲突了。
递归的本质要在栈上操作一层一层的参数(反映每次的状态), 如果数据被闭包捕获了,是否相当于“全局变量“,是不是跟递归的理念就违背了?
还是,如果是”可变借用“,那么,递归就涉及多次可变借用了,也与内存安全的设计要求冲突了。
多谢,看来是没有方便的方法来实现了,还是老老实实传参吧
--
👇
songzhi: Is it possible to make a recursive closure in Rust?
Is it possible to make a recursive closure in Rust?