递归与迭代的区别(后续再加)

通俗的说:

迭代是通过小规模问题的解逐步求解大规模问题的解,也成为正推过程。

递归是通过较复杂的问题的解依次归结为较简单的操作,也成为反推过程。递归就是自己调用自己。

### 动态规划递归算法的相似性 两者都基于将一个问题分解为更小子问题的思想。对于拥有最优子结构特性的原问题,这两种方法都能有效地解决问题[^2]。 #### 子问题处理方式 - **动态规划**:采用迭代的方式自底向上构建解空间表,也可以使用带记忆化的递归来避免重复计算相同子问题。 - **递归**:直接通过函数调用自身的方式来求解各个子问题,通常是自顶向下的过程。 ### 动态规划递归的主要差异 #### 解决方案构建方向 - **动态规划**倾向于先解决最小规模问题并逐步扩大范围直到覆盖整个原始问题;而**递归**则是从大问题入手不断缩小直至触及基础情形(base case),之后再返回组合结果。 #### 对于重叠子问题的态度 - 当存在大量重复出现的小型子问题时, - **动态规划**会存储这些中间结果以便后续查询,从而大大提高效率; - **递归**如果不加优化,则可能会多次重新计算相同的子问题实例,造成不必要的性能开销。 #### 实现机制的不同 - **动态规划**可以借助表格或者其他数据结构显式保存状态转移关系; - **递归**更多依赖栈帧记录每次调用的状态信息,在某些情况下可以通过引入缓存技术转变为记忆化搜索形式以接近DP的效果。 ```python # 使用递归实现斐波那契数列 def fibonacci_recursive(n): if n <= 1: return n else: return fibonacci_recursive(n-1) + fibonacci_recursive(n-2) # 使用动态规划实现斐波那契数列 def fibonacci_dp(n): dp = [0]*(n+1) dp[1] = 1 for i in range(2, n+1): dp[i] = dp[i-1]+dp[i-2] return dp[n] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值