递归技术

递归的思想:将一个大问题分割成多个结构与原问题一样的小的子问题,然后解决子问题,最后将子问题的解合并得到原问题的解。

递归的应用:归纳法、分治法、动态规划法

1、归纳法:

1)根据数学归纳法,对参数n做归纳,

2)先假设参数小于n的问题已解决,

3)然后归纳出解决带参数n的问题的方法,

4)最后用归纳出的方法依次解决带参数0,1,...,n-1,n的问题,从而原带参数n的问题得解。

5)应用举例:基数排序、插入排序... ...

2、分治法:

1)分解问题:将原问题分解成结构与原问题相同的子问题

2)解决子问题:递归解决分解出来的子问题

3)合并解:将子问题的解组合得到原问题的解

4)应用举例:二分查找算法、归并排序算法... ...

3、动态规划法:

1)最优子结构(最优化原理):一个最优的决策序列,其每个子决策序列必须是最优的决策序列。

2)重叠子问题:问题的解通常用递归形式说明,但不用递归调用自身。

3)应用举例:最短路问题,最长公共子序列问题... ...


扩展递归技术是解决递推关系式问题的一种方法,它通过记忆化搜索的方式优化递归函数的性能,避免重复计算相同问题,从而提高效率。解决递推关系式时,我们通常会遇到两个问题:求解特定项的值和生成项的序列。 以下是使用扩展递归技术求解递推关系式的一般步骤: 1. 定义递归函数:根据递推关系式定义一个递归函数,函数的参数通常包括当前要计算项的下标或值以及任何必要的参数。 2. 使用记忆化:创建一个数据结构(例如数组或哈希表)来存储已经计算过的项的值。在递归函数中,每次计算之前先检查所需项是否已经计算过,如果是,则直接返回存储的值,避免重复计算。 3. 递归终止条件:确保递归有明确的终止条件,这些条件通常是递推关系式中的基本情况。 4. 计算递推关系式:在递归函数中实现递推关系式,确保每一项的计算都遵循递推关系式定义的规则。 例如,假设有一个递推关系式 f(n) = f(n-1) + f(n-2),这是一个斐波那契数列的定义。使用扩展递归技术求解的伪代码如下: ```pseudo def extended_recursive_fib(n, memo): if n in memo: # 检查记忆化存储中是否已有结果 return memo[n] if n <= 1: return n memo[n] = extended_recursive_fib(n-1, memo) + extended_recursive_fib(n-2, memo) # 计算并存储结果 return memo[n] memo = {} # 初始化记忆化存储结构 result = extended_recursive_fib(n, memo) # 调用递归函数并传入记忆化存储结构 ``` 在这个例子中,我们使用了`memo`这个字典来存储已经计算过的斐波那契数列的值,从而避免了重复计算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值