解决递归问题的六种方法

许多软件工程师在编程面试中遇到递归问题。 如果你想成为善于解决递归问题,学习这6个模板:

1.迭代
任何可以用循环解决的问题也可以用递归解决。

有时候递归提供了一个更简洁和优雅的解决方案,即使效率较低。

范例:
- 按逆序遍历链表 

2.子问题
模式侧重于定义和解决问题的较小版本。

标准的策略是从输入中删除一些内容。

示例如下:

  • - 查找字符串是否为回文
  • - 找到所有爬楼梯的方法 

3.选择
有些问题可以通过以下方式解决:

  • ·查找某些输入元素的所有组合
  • ·选择与给定条件匹配的组合

范例:
- 找到所有可能的方法来交错2字符串 

4.顺序
此模式类似于选择,但元素组合的顺序很重要。

这些问题可以通过以下方式解决:

  • ·找到所有的排列
  • ·过滤它们

范例:
- 找到所有的N位数的数字总和为一个目标数 

5.分而治之
此模式侧重于将问题拆分为多个子问题:

  • ·每个子问题单独解决
  • ·组合解决方案以获得结果

范例:
- 找到所有的方法来括号一个表达式

6.深度优先搜索
此模式在树或图中查找路径:

  • ·从一个节点开始
  • ·递归访问每个节点的邻居
  • ·避免重复循环

范例:
- 在一个矩阵中从左上角到右下角找出乘积最大的路径

https://www.jdon.com/71731.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值