算法学习之递归思想

本文介绍递归算法,它是计算机等领域强大的问题解决方法,能简化复杂问题。阐述了递归基本思想,即把问题划分为更小的子问题。说明了递归算法基本设计步骤,还提及设计时需注意的问题,并给出计算函数值和汉诺塔问题两个递归设计实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.算法思想

递归(Recurrence):计算机、数学、运筹等领域经常使用的最 强大的解决问题的方法之一,它用一种简单的方式来解决那 些用其他方法解起来可能很复杂的问题,也就是说有些问题 用递归算法来求解,则变得简单,而且容易理解。

 递归的基本思想:把一个问题划分为一个或多个规模更小的 子问题,然后用同样的方法解规模更小的子问题。

二.递归算法的基本设计步骤

1.找到问题的初始条件(递归出口),即当问题规模小到某个 值时,该问题变得很简单,能够直接求解。

2.设计一个策略,用于将一个问题划分为一个或多个一步步接 近递归出口的相似的规模更小的子问题。

3.将所解决的各个小问题的解组合起来,即可得到原问题的解。

三.设计递归算法时需注意以下几个问题

1.如何使定义的问题规模逐步缩小,而且始终保持同一问题 类型?

2.每个递归求解的问题其规模如何缩小?

3.多大规模的问题可作为递归出口?

4.随着问题规模的缩小,能到达递归出口吗?

四.递归设计实例

问题一

1. 计算 f (n)=2^{n}

2.考虑

f(n)=\begin{Bmatrix} 2& if->n=1 & \\ 2*f(n-1)&if->n>1 & \end{Bmatrix}

计算f(3)

 3.代码片段

function f(n)
    if n=0 then return 1
    else if n>0 then return 2*f(n-1)
end

问题二

Hanoi问题

 给定三根柱子, 其中A柱子从大到小套有n个圆盘, 问题是如何借助B柱子, 将圆盘从A搬到C

和尚搬圆盘的游戏规则如下:

 一次只能搬动一个圆盘;

 不能将大圆盘放在小圆盘上面。

和尚们相信当解决了柱子上圆盘数为64的问题时,也就 是世界末日到来的时候!!

 递归算法来求解圆盘搬动问题,其详细过程如下

(1) 将前个圆盘从A柱借助于C柱搬到B柱;

(2) 将最后一个圆盘直接从A柱搬到C柱;

(3) 将个圆盘从B柱借助于A柱搬到C柱。

伪代码片段

Hanoi(n, A, B, C)
1 if n=1 then move(1, A, C)
2 else
3 Hanoi(n-1, A, C, B)
4 move(n, A, C)
5 Hanoi(n-1, B, A, C)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值