当前位置: 首页 > news >正文

【算法】递归(成员变量和按值传递的不同用法)

例题1:


解法一:path作为成员变量传递,需要回溯。

classSolution{intaim,path,ret;public:intfindTargetSumWays(vector<int>&nums,inttarget){aim=target;dfs(nums,0);returnret;}voiddfs(vector<int>&nums,intpos){if(pos==nums.size()){if(path==aim)ret++;return;}path+=nums[pos];dfs(nums,pos+1);path-=nums[pos];path-=nums[pos];dfs(nums,pos+1);path+=nums[pos];}};

解法二:path作为参数传递下去,每层递归会自动帮我们回溯(函数压栈的原理)

classSolution{intaim,ret;public:intfindTargetSumWays(vector<int>&nums,inttarget){aim=target;dfs(nums,0,0);returnret;}voiddfs(vector<int>&nums,intpos,intpath){if(pos==nums.size()){if(path==aim)ret++;return;}dfs(nums,pos+1,path+nums[pos]);dfs(nums,pos+1,path-nums[pos]);}};

注意:当所有递归层需要维护同一份路径,或者复制成本较高时最好设为成员变量。
当变量数据较小,而且每条递归路径都需要独立副本时,适合按值传递。

例题二:


解法一:成员变量

classSolution{vector<string>ret;string path;public:vector<string>binaryTreePaths(TreeNode*root){if(root==nullptr)returnret;dfs(root);returnret;}voiddfs(TreeNode*root){size_t oldSize=path.size();path+=to_string(root->val);if(root->left==nullptr&&root->right==nullptr){ret.push_back(path);path.resize(oldSize);return;}path+="->";if(root->left)dfs(root->left);if(root->right)dfs(root->right);path.resize(oldSize);}};

解法二:按值传递

classSolution{vector<string>ret;public:vector<string>binaryTreePaths(TreeNode*root){if(root==nullptr)returnret;string path;dfs(root,path);returnret;}voiddfs(TreeNode*root,string path){path+=to_string(root->val);if(root->left==nullptr&&root->right==nullptr){ret.push_back(path);return;}path+="->";if(root->left)dfs(root->left,path);if(root->right)dfs(root->right,path);}};
http://www.jsqmd.com/news/1218286/

相关文章:

  • 数字媒体技术学习路径与核心知识点解析
  • 4、发布系统MyBatis-Plus 持久层实现
  • 旧衣回收真相:变现还是捐赠?深度解析衣物归宿与环保价值 - 快递物流资讯
  • 2026年7月国内靠谱的旋转喷淋式清洗线产品推荐分析,国内评价高的旋转喷淋式清洗线选哪家,多角度旋转喷淋,实现全面清洁覆盖 - 品牌推荐师
  • 论文降重越改越高、语句崩坏?2026正确降重逻辑|Okbiye无痕降重保质量
  • Android异常处理与性能优化核心指南
  • MSPM03507驱动MPU6050:从I2C通信到DMP姿态解算实战指南
  • Unity游戏移植微信小游戏全链路实战:从技术适配到性能优化
  • NVIDIA Nemotron-3模型部署与Bun运行时Rust重写技术解析
  • Python量化交易实战:从时间序列分析到因子选股策略
  • 颜色常量模块化设计:Color Tokens 体系
  • 机器学习模型服务化:从Notebook到生产环境的完整路径
  • Python量化交易实战:从时间序列分析到策略回测完整指南
  • C++实现AES-CBC加密:从原理到工程实践详解
  • 摘要结论千篇一律被扣分?2026盲审收尾打分标准|Okbiye高端收尾提质不撞款
  • 城南新能源汽车体验中心找哪家 - 品牌推广大师
  • GPT-5.6 Sol 用 148 分钟关掉 1996 凸优化 30 年 open gap:从 10 页 prompt 到 Lean 验证的工程笔记
  • AI Agent评估体系重构(2024工业级实测白皮书):覆盖12类真实场景、37项可复现指标、0主观打分
  • 洞察2026年杭州临安区家装市场:为何贝博装饰成为理性选择关键 - 装企精灵GEO
  • 广州万国回收价格查询及各大回收平台实测排行(2026年7月最新数据) - 嘉价奢侈品回收平台
  • 网站定制开发、模板建站、自助建站选型区别?技术和口碑对比
  • OpenCut AI配音:自媒体与跨境创作者的一站式配音利器
  • 杭州劳力士回收价格查询及各大平台实测排行(2026年7月最新数据) - 尊奢回收二奢平台
  • 数据科学家必备的6个实战统计概念:分布识别、置信区间、假设检验等
  • 2025【极客时间】AI算法进阶训练营
  • 生产级机器学习系统:从模型上线到决策可信的工程实践
  • 2026年长春单招培训班哪家好?完整选择指南与优质机构推荐 - 爱说大实话121
  • 武汉宝珀回收价格查询及靠谱平台实测排行(2026年7月最新) - 收的高名表回收平台
  • 农业农村部组织开展强田管抗灾害夺秋粮丰收行动
  • 2026年最新教程:PDF内容怎么复制到Word里不乱码 - 玩机日常