递归算法及程序实现ppt(粤教版)选修1PPT课件
合集下载
递归算法课件

写成函数形式,则为:
当n 0时 1 f ( n) n * f (n 1) 当n 0时
这种函数定义的方法是用阶乘函数自己本身定义了 阶乘函数,称上式为阶乘函数的递推定义式。
数学归纳法表明,如果我们知道某个论点对最小的情 形成立,并且可以证明一个情形暗示着另一个情形,那么我 们就知道该论点对所有情形都成立。 数学有时是按递归方式定义的。 例1:假设S(n)是前n个整数的和,那么S(1)= 1,并且 我们可以将S(n)写成S(n)= S(n-1)+ n。 根据递归公式,我们可以得到对应的递归函数: int S(int n) { if (n == 1) return 1; else return S(n-1) + n; } 函数由递归公式得到,应该是好理解的,要想求出S (n),得先求出S(n-1),递归终止的条件(递归出口)是(n == 1)。
↑
low 第二次: 下标 元素值 0 1 1 3 2 4
↑
mid 3 5 4 17 5 18 6 31
↑
high 7 33
↑
low 第三次: 下标 元素值 0 1 1 3 2 4 3 5 4 17
↑
mid 5 18 6 31
↑
high 7 33
↑
low high mid
• Public static void main(String args[]) •{ • int[] shus={1,3,4,5,17,18,31,33};
求Fib(5)的递归计算过程如图所示。
Fib(5) Fib(4) Fib(3) Fib(2) Fib(1) Fib(2) Fib(3) Fib(2) Fib(1) Fib(0)
Fib(1) Fib(0) Fib(1)
当n 0时 1 f ( n) n * f (n 1) 当n 0时
这种函数定义的方法是用阶乘函数自己本身定义了 阶乘函数,称上式为阶乘函数的递推定义式。
数学归纳法表明,如果我们知道某个论点对最小的情 形成立,并且可以证明一个情形暗示着另一个情形,那么我 们就知道该论点对所有情形都成立。 数学有时是按递归方式定义的。 例1:假设S(n)是前n个整数的和,那么S(1)= 1,并且 我们可以将S(n)写成S(n)= S(n-1)+ n。 根据递归公式,我们可以得到对应的递归函数: int S(int n) { if (n == 1) return 1; else return S(n-1) + n; } 函数由递归公式得到,应该是好理解的,要想求出S (n),得先求出S(n-1),递归终止的条件(递归出口)是(n == 1)。
↑
low 第二次: 下标 元素值 0 1 1 3 2 4
↑
mid 3 5 4 17 5 18 6 31
↑
high 7 33
↑
low 第三次: 下标 元素值 0 1 1 3 2 4 3 5 4 17
↑
mid 5 18 6 31
↑
high 7 33
↑
low high mid
• Public static void main(String args[]) •{ • int[] shus={1,3,4,5,17,18,31,33};
求Fib(5)的递归计算过程如图所示。
Fib(5) Fib(4) Fib(3) Fib(2) Fib(1) Fib(2) Fib(3) Fib(2) Fib(1) Fib(0)
Fib(1) Fib(0) Fib(1)
用解析法设计程序ppt(粤教版)选修1优质课件PPT

根据公式计算
输出结果
结束
2021/02/01
3
最终用代码形式表示:
dim x1,x2 as double
dim a,b,c AS Double a=inputbox(“a=“) b=inputbox(“b=“) c=inputbox(“c=“)
if b*b-4*a*c>=0 then
x1=(-b+sqr(b*b-4*a*c))/(2*a) x2=(-b-sqr(b*b-4*a*c))/(2*a) print x1,x2
else print “方程无解”
end if
2021/02/01
4
解析算法
❖ 算法的基本思想是能找到解决解决问题的正 确的公式,用它来描述问题的原始数据与结 果之间的关系。在编制程序过程中,必须注 意计算过程描述的正确性。
2021/02/01
5
用解析法设计程序
2021/02/01
6
例一:小李将要参加旅行团乘坐某航空公司的班机到北京参观,经了解,机票 价格是800元,航空公司对旅客随身携带行李的费用计算标准为:20千克以内 免收行李费;若行李在40千克以内,则20千克仍免费,超过20千克的部分每 公斤按票价1.5%的标准收费;若在40千克以上,除按上述标准收费外,超过 40千克部分加倍收费。试用程序来帮助计算小李所需的行李费。
设所求的数为Y,X为已知行李重量,则X、Y应满足的关系式是:
Y=0
( 0 < X <= 20 )
Y= (X-20)*800*0.015
(20 < X <= 40 )
Y=(2*(X-40)+20)*800*0.015 ( X>40 )
[设计算法]
输出结果
结束
2021/02/01
3
最终用代码形式表示:
dim x1,x2 as double
dim a,b,c AS Double a=inputbox(“a=“) b=inputbox(“b=“) c=inputbox(“c=“)
if b*b-4*a*c>=0 then
x1=(-b+sqr(b*b-4*a*c))/(2*a) x2=(-b-sqr(b*b-4*a*c))/(2*a) print x1,x2
else print “方程无解”
end if
2021/02/01
4
解析算法
❖ 算法的基本思想是能找到解决解决问题的正 确的公式,用它来描述问题的原始数据与结 果之间的关系。在编制程序过程中,必须注 意计算过程描述的正确性。
2021/02/01
5
用解析法设计程序
2021/02/01
6
例一:小李将要参加旅行团乘坐某航空公司的班机到北京参观,经了解,机票 价格是800元,航空公司对旅客随身携带行李的费用计算标准为:20千克以内 免收行李费;若行李在40千克以内,则20千克仍免费,超过20千克的部分每 公斤按票价1.5%的标准收费;若在40千克以上,除按上述标准收费外,超过 40千克部分加倍收费。试用程序来帮助计算小李所需的行李费。
设所求的数为Y,X为已知行李重量,则X、Y应满足的关系式是:
Y=0
( 0 < X <= 20 )
Y= (X-20)*800*0.015
(20 < X <= 40 )
Y=(2*(X-40)+20)*800*0.015 ( X>40 )
[设计算法]
算法与程序设计.ppt

三、教材的结构体系
第一章 揭开计算机解决问题的神秘面纱
三、教材的结构体系
第一章 揭开计算机解决问题的神秘面纱
第一节 计算机解决问题的过程/2 一、从生产方案选择问题开始/2 二、计算机解决问题的步骤/3
第二节 算法与算法的描述/8 一、算法/8 二、算法的描述/9 三、算法在解决问题中的地位和作用/13
在选修部分的五个模块中“算法与程序设计”是作为 计算机应用的技术基础设置的。
课程的定位
信息技术本体视角 信息技术文化视角
人工智能
发展性 (提高层面)
网络技术 数据管理
多媒体设计与制作 算法与程序设计
基础性 (普及层面)
信息技术基础
必修和选修模块 的传承
课程的目标
1. 使学生在原有基础上进一步体验算法思想, 了解算法和程序设计在解决问题过程中的地 位和作用;
(算法的选择<多样性>) 求两个正整数的最大公约数:
同学甲的算法(辗转相除法) Private Sub Command1_CLick()
Dim m As Long, n As Long m = 9147485 n = 5147480
r = m Mod n Do While r > 0
m=n n=r r = m Mod n Loop
信息技术(选修1)
算法与程序设计
广东省基础教育课程资源研究开发中心信息技术教材编写组 编著
主编:徐福荫 李文郁
本册主编:黄国洪 王咸伟
广东省出版集团 广东教育出版社出版
粤教版《算法与程序设计》 教材与教学研讨
黄国洪
信息技术特级教师 粤教版信息技术课程标准实验教材副主编 广东省基础教育信息技术教学指导委员会专家
递归及递归算法分析课件

A(1,1)=2故A(n,1)=2*n ❖ M=2时,A(n,2)=A(A(n-1,2),1)=2A(n-1,2),和
A(1,2)=A(A(0,2),1)=A(1,1)=2,故A(n,2)= 2^n 。
2 222
❖ M=3时,类似的可以推出
n
❖ M=4时,A(n,4)的增长速度非常快,以至于没有适当的数 学式子来表示这一函数。
❖
move(a,b);
❖
hanoi(n-1, c, b, a);
❖
}
❖}
❖ T(n)=2T(n-1)+O(1) n≥1
T(n)=2n-1
0
n=0
4
27
简单递归式的求解
1.T(n)=T(n-1)+c1 n>1
c2
n=1
2. T(n)=2T(n/2)+c1 n ≥2
c2
n<2
3. T(n)=2T(n/2)+Θ(n) n ≥2
O(1)
n<2
28
T( n/2 ) + T( n/2 ) + 1
例1 T(n) =
0
(n = 1)
解 :T(n)=2T(n/2)+1
=22T(n/22)+2+1
=23T(n/23)+22+2+1
令2r=n =2rT(1)+2r-1+。。。+2+1
=(1-2r)/(1-2)=n-1
∴ T( n ) = n - 1
25
递归算法的时间复杂度分析
❖ 递归函数求解
简单递归式求解 master method 递推方程的特征方程求解
A(1,2)=A(A(0,2),1)=A(1,1)=2,故A(n,2)= 2^n 。
2 222
❖ M=3时,类似的可以推出
n
❖ M=4时,A(n,4)的增长速度非常快,以至于没有适当的数 学式子来表示这一函数。
❖
move(a,b);
❖
hanoi(n-1, c, b, a);
❖
}
❖}
❖ T(n)=2T(n-1)+O(1) n≥1
T(n)=2n-1
0
n=0
4
27
简单递归式的求解
1.T(n)=T(n-1)+c1 n>1
c2
n=1
2. T(n)=2T(n/2)+c1 n ≥2
c2
n<2
3. T(n)=2T(n/2)+Θ(n) n ≥2
O(1)
n<2
28
T( n/2 ) + T( n/2 ) + 1
例1 T(n) =
0
(n = 1)
解 :T(n)=2T(n/2)+1
=22T(n/22)+2+1
=23T(n/23)+22+2+1
令2r=n =2rT(1)+2r-1+。。。+2+1
=(1-2r)/(1-2)=n-1
∴ T( n ) = n - 1
25
递归算法的时间复杂度分析
❖ 递归函数求解
简单递归式求解 master method 递推方程的特征方程求解
高中信息技术粤教版选修1课件-1.1 计算机解决问题的过程-

信息技术(选修一)
算法与程序设计
1.1计算机解决问题的过程
(一) 人是如何解决问题的:
问题:回顾二元一次方程组 x-2y=-1 ①
2x+y=1 ② 的求解过程,归纳出以下步骤:
第一步:①+②*2 得 5x=1 ③ 第二步:解③,得x=1/5
第三步:② - ① *2,得5y=3 ④ 第四步:解④ ,得y=3/5
不同点
计算速度 精确度
计算速度比较慢
计算速度比较快
精确度不高,易出错
编写程序、调试程序、 运算速度快
自动化 不具有自动化解决问题 具有一定的自动化
小结
人是如何解决问题的
用计算机程序解决问题的基本过程
分析问题
设计算法
编写程序
人工解题与计算机解题的异同点
调试程序
实践
模仿学过的用计算机程序解决问题的方法,设 计一个算法,尝试求解鸡兔同笼问题:
4、调试程序
运行调试程序,并对VB进行讲解。
提示: 程序语法有错误,计算机会给出提示信息,逻辑错误
或计算方法的错误,计算机是查不出来的。
总结:计算机解决问题的步骤
具
分
设编调
得
体
析
计写试
到
问
问
算程程
答
题
题
法序序
案
(三) 人解决问题与计算机解决问题的异同
相同点
分析问题、设计算法、得出结果等
人类解决问题 用计算机解决问题
问 题:
求解一般的二元一次方程组,计算机如何解决?
一般的二元一次方程组
a1x+b1y=c1 ⑤ a2x+b2y=c2 ⑥
对方程组进行分析
算法与程序设计
1.1计算机解决问题的过程
(一) 人是如何解决问题的:
问题:回顾二元一次方程组 x-2y=-1 ①
2x+y=1 ② 的求解过程,归纳出以下步骤:
第一步:①+②*2 得 5x=1 ③ 第二步:解③,得x=1/5
第三步:② - ① *2,得5y=3 ④ 第四步:解④ ,得y=3/5
不同点
计算速度 精确度
计算速度比较慢
计算速度比较快
精确度不高,易出错
编写程序、调试程序、 运算速度快
自动化 不具有自动化解决问题 具有一定的自动化
小结
人是如何解决问题的
用计算机程序解决问题的基本过程
分析问题
设计算法
编写程序
人工解题与计算机解题的异同点
调试程序
实践
模仿学过的用计算机程序解决问题的方法,设 计一个算法,尝试求解鸡兔同笼问题:
4、调试程序
运行调试程序,并对VB进行讲解。
提示: 程序语法有错误,计算机会给出提示信息,逻辑错误
或计算方法的错误,计算机是查不出来的。
总结:计算机解决问题的步骤
具
分
设编调
得
体
析
计写试
到
问
问
算程程
答
题
题
法序序
案
(三) 人解决问题与计算机解决问题的异同
相同点
分析问题、设计算法、得出结果等
人类解决问题 用计算机解决问题
问 题:
求解一般的二元一次方程组,计算机如何解决?
一般的二元一次方程组
a1x+b1y=c1 ⑤ a2x+b2y=c2 ⑥
对方程组进行分析
教科版选修1《递归法》ppt课件

题的运行效率较低。所以一般不提倡用递归算法 设计程序
递归法的归纳2:
递归算法所体现的“重复”一般有三个要求: 一是每次调用在规模上都有所缩小(通常是减半); 二是相邻两次重复之间有紧密的联系,前一次要为
后一次做准备(通常前一次的输出就作为后一次的 输入); 三是在问题的规模极小时必须用直接给出解答而不 再进行递归调用,因而每次递归调用都是有条件 的(以规模未达到直接解答的大小为条件),无条 件递归调用将会成为死循环而不能正常结束。
• 注意:必须要有一个结束递归的条件,不 得无限递归。
分析步骤:
• 1.决定问题规模的参数。 • 2.问题的边界条件及边界值。 • 3.解决问题的通式。
例:计算一个数的阶乘
• 1!=1 • 2!=1*2 • 3!=1*2*3 • 4!=1*2*3*4 • 5!=1*2*3*4*5 • ……. • n!=1*2*3*4*5*….*n
函数是为了实现某种功能而编写的一段相对独立 的程序。
• 标准函数
Abs( ) 、len( )、mid( )、chr( )、asc( )……
• 自定义函数
自定义函数是指我们自己编写的函数。
自定义函数:
• 在VB中,自定义函数形式如下: • [Public|Private] Function <函数名称> ([参数列表]) [As
f(1)=1 f(2)=f(1)*2 f(3)=f(2)*3 f(4)=f(3)*4 f(5)=f(4)*5 …….. f(n)=f(n-1)*n
递归函数求5!
• Public Function s(n As Integer) As Long
• If n = 1 Then
• s =1
• Else
递归法的归纳2:
递归算法所体现的“重复”一般有三个要求: 一是每次调用在规模上都有所缩小(通常是减半); 二是相邻两次重复之间有紧密的联系,前一次要为
后一次做准备(通常前一次的输出就作为后一次的 输入); 三是在问题的规模极小时必须用直接给出解答而不 再进行递归调用,因而每次递归调用都是有条件 的(以规模未达到直接解答的大小为条件),无条 件递归调用将会成为死循环而不能正常结束。
• 注意:必须要有一个结束递归的条件,不 得无限递归。
分析步骤:
• 1.决定问题规模的参数。 • 2.问题的边界条件及边界值。 • 3.解决问题的通式。
例:计算一个数的阶乘
• 1!=1 • 2!=1*2 • 3!=1*2*3 • 4!=1*2*3*4 • 5!=1*2*3*4*5 • ……. • n!=1*2*3*4*5*….*n
函数是为了实现某种功能而编写的一段相对独立 的程序。
• 标准函数
Abs( ) 、len( )、mid( )、chr( )、asc( )……
• 自定义函数
自定义函数是指我们自己编写的函数。
自定义函数:
• 在VB中,自定义函数形式如下: • [Public|Private] Function <函数名称> ([参数列表]) [As
f(1)=1 f(2)=f(1)*2 f(3)=f(2)*3 f(4)=f(3)*4 f(5)=f(4)*5 …….. f(n)=f(n-1)*n
递归函数求5!
• Public Function s(n As Integer) As Long
• If n = 1 Then
• s =1
• Else
递归算法 ppt课件

ppt课件
14
int fib(int n) { if (n==0) return 0; if (n==1) return 1; return (fib(n-1)+fib(n-2)); }
输入 15 输出 fib(15)=610
//满足边界条件,递归返回 //满足边界条件,递归返回 //递归公式,进一步递归
//调用下一层递归
}
int main()
{
int n,k;
cin >> n >> k;
cout << s(n,k);
return 0;
}
ppt课件
19
【例6】数的计数(Noip2001)
【问题描述】
我们要求找出具有下列性质数的个数(包括输入的自然数n)。先输入一 个自然数n(n≤1000),然后对此自然数按照如下方法进行处理:
8
ppt课件
9
假设把第3步,第4步,第7步抽出来就相当于N=2的情况(把上面2片 捆在一起,视为一片):
ppt课件
10
所以可按“N=2”的移动步骤设计:
①如果N=0,则退出,即结束程序;否则继续往下执行;
②用C柱作为协助过渡,将A柱上的(N-1)片移到B柱上,调用过程mov(n-1,
a,b,c);
本题是典型的递归程序设计题。 (1)当N=1 时,只有一个盘子,只需要移动一次:A—>C; (2)当N=2时,则需要移动三次:
A------ 1 ------> B, A ------ 2 ------> C, B ------ 1------> C. (3)如果N=3,则具体移动步骤为:
高中信息技术 2.2 程序的顺序结构课件 粤教版选修1

a
1
2.2.1居民生活消费支出的计算
根据国家营养学会推荐的食品定量标准及某年某县农村住户 调查资料,该县农村住户基本食品消费项目、数量(每人每 年)和单价如表所示
项目 粮 蔬 油 薯 肉 干 蛋 鱼 乳 水
食 菜 脂类 类 豆 类 虾 类 果
类
类
数量 170 144 3 36 18 12 6 6 24 10 kg
单价 2.4 1.4 9.4 1.14 12.7 2.49 6.67 9.32 2.64 2.07
元/kg 6 2 1
4
a
2
(1)求基本食品消费支出 (2)如果按联合国粮农组织提出的贫困标准,把基本食品消 费支出占总的生活消费支出的比重为60%,求总的生活消费 支出 (1)分析问题
x=170*2.26+144*1.42+…….10*2.07 y=x/0.6
(2)设计算法
(3)编写程序
(4)调试程序
a
3
1、赋值语句
赋值语句的基本格式是: 变量=表达式
“=” 是赋值号,将表达式的值赋给左边的变量
练习: (1)A=A+10 (2)如果A=30,B=40,则依次执行语句T=A,A=B,B=T 后,A、B两个变量的值发生交换A=?,B=?
a
4
2、输入数据的函数 InputBox( )是提供从键盘输入数据的函数。 InputBox( )的语法格式为:
InputBox(提示信息,标题,默认值,位置)
提示信息:指对输入数据的提示,显示在对话框中。
标题:指运行此函数后弹出的对话框的标题。
默认值:指默认的输入数据值。
位置:指运行此函数后弹出的对话框的左上角在屏幕上的位置。aຫໍສະໝຸດ 53、输出数据的方法
1
2.2.1居民生活消费支出的计算
根据国家营养学会推荐的食品定量标准及某年某县农村住户 调查资料,该县农村住户基本食品消费项目、数量(每人每 年)和单价如表所示
项目 粮 蔬 油 薯 肉 干 蛋 鱼 乳 水
食 菜 脂类 类 豆 类 虾 类 果
类
类
数量 170 144 3 36 18 12 6 6 24 10 kg
单价 2.4 1.4 9.4 1.14 12.7 2.49 6.67 9.32 2.64 2.07
元/kg 6 2 1
4
a
2
(1)求基本食品消费支出 (2)如果按联合国粮农组织提出的贫困标准,把基本食品消 费支出占总的生活消费支出的比重为60%,求总的生活消费 支出 (1)分析问题
x=170*2.26+144*1.42+…….10*2.07 y=x/0.6
(2)设计算法
(3)编写程序
(4)调试程序
a
3
1、赋值语句
赋值语句的基本格式是: 变量=表达式
“=” 是赋值号,将表达式的值赋给左边的变量
练习: (1)A=A+10 (2)如果A=30,B=40,则依次执行语句T=A,A=B,B=T 后,A、B两个变量的值发生交换A=?,B=?
a
4
2、输入数据的函数 InputBox( )是提供从键盘输入数据的函数。 InputBox( )的语法格式为:
InputBox(提示信息,标题,默认值,位置)
提示信息:指对输入数据的提示,显示在对话框中。
标题:指运行此函数后弹出的对话框的标题。
默认值:指默认的输入数据值。
位置:指运行此函数后弹出的对话框的左上角在屏幕上的位置。aຫໍສະໝຸດ 53、输出数据的方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
步骤②:将第N个盘从座柱A搬动到座柱C 步骤③:将(n-1)个盘从座柱B搬动座柱C,在座柱A的帮助 下
移动规则是每次只能搬动一个盘,所以搬动(n-1)个盘时, 肯定需要另一个柱子帮助。当n=1时,也就是搬动一个盘, 那只要直接将这个盘从座柱A搬到座柱C就可以了。
2020年10月2日
7
授课人:杨鹏
(1)汉诺塔的算法流程图
第28课 递归算法及程序实现
2020年10月2日
授课人:1 杨鹏
2020年10月2日
高中信息术必修2:算法与程序设计
1.汉诺塔问题。相传古代东方有一座寺 庙,庙内有三根座桩,第一根座桩上 叠有一摞64个中心带孔、直径各不相 同的圆盘片,这些圆盘片叠成塔状, 即越上面的盘片的直径越小。要把这 64个盘片从第一根座桩搬到第三根座 桩上,搬动的规则如下: (1)一次只能从有盘片的座桩上取 走一个盘片; (2)被取走的盘片必须马上放到另 一根座桩上; (3)任何一根座桩上如果有一个以 上盘片,则这些盘片必须呈直径上小 下大的塔状。 需要搬动多少次才能把64个盘片从第 一根座桩搬到第三根座桩上? 2.用 递归算法计算n的阶乘n!。
Else Call hanoi(n - 1, a, b, c) '搬动N-1个盘从座柱A到座柱B,在 座柱C帮助下 num = num + 1 List1.AddItem (Str(num) + " " + a + " -> " + c) Call hanoi(n - 1, b, c, a) '搬动N-1个盘从座柱B到座柱C,在 座柱A帮助下 End If End Sub
递归算法的特点:递归过程一般通过函数或 子过程来实现。
递归算法的实质:是把问题转化为规模缩小
了的同类问题的子问题,然后递归调用函数 (或过程)来表示问题的解。
2020年10月2日
9
授课人:杨鹏
高中信息技术必修2:算法与程序设计
(2)编写程序代码。 'Hanoi过程四个参数分别是盘数,源柱,目标柱,帮助柱, 过程完成功能将N个盘从源柱搬动到目标柱在帮助柱帮助下。 Sub hanoi(n As Integer, a As String, c As String, b As String) If (n = 1) Then '当只有一个盘时 num = num + 1 '计算器增加1 List1.AddItem (Str(num) + " " + a + " -> " + c) '搬动一个盘 从源柱到目标柱
2
授课人:杨鹏
新课引入
高中信息技术必修2:算法与程序设计
相传古代东方有一座寺庙,庙内有三根座桩, 第一根座桩上叠有一摞64个中心带孔、直径各不相 同的圆盘片,这些圆盘片叠成塔状,即越上面的盘 片的直径越小。要把这64个盘片从第一根座桩搬到 第三根座桩上,搬动的规则如下: (1)一次只能从有盘片的座桩上取走一个盘片; (2)被取走的盘片必须马上放到另一根座桩上; (3)任何一根座桩上如果有一个以上盘片,则这些盘 片必须呈直径上小下大的塔状。
2020年10月2日
11
授课人:杨鹏
例:求n的阶乘。
高中信息技术必修2:算法与程序设计
把“从一根座桩上取走一个盘片,放到另一根座桩 上”说成是“搬动一次”。
2020年10月2日
3
授课人:杨鹏
问题提出
高中信息技术必修2:算法与程序设计
需要搬动多少次才能把64个盘片从第一根座桩 搬到第三根座桩上?
先将问题缩小化,尝试2个盘、3个盘、4个 盘、5个盘等的搬动过程。
Hanoi游戏(点击上图运行体验)
2020年10月2日
10
授课人:杨鹏
高中信息技术必修2:算法与程序设计
(3)搬动次数计算 将n个盘片从座柱A搬到座柱C,完成步骤①需要h(n-1)次搬动,完成步骤②只需 要1次搬动,而完成步骤③也需要搬动h(n-1)次。这样,把n个盘片从座柱A搬到 座柱C所需的搬动次数
h(4)=2×h(3)+1=2×(2×h(2)+1)+1=2×(2×(2×h(1)+1)+1)+1=2×(2×(2×1+ 1)+1)+1=24-1=15,2×(2×(2×1+1)+1)+1恰好是二进制数1111转化为十进制的 式子。 汉诺塔问题是一个经典的NP问题,对于计算机来说仍然是一个“难”的问题, “难”主要是说程序执行步数随着N的增长呈指数级增长,如果塔上有64个盘, 则搬动次数是二进制11111…111(64个1)次,换算为十进制数值为264-1= 184467445,目前按每秒可以完成10亿次搬动(大约是230),也需要234秒,大 约是198841天,约544年,即使有这样的速度在有生之年是无法看到所有的搬动 过程。
6
授课人:杨鹏
高中信息技术必修2:算法与程序设计
(0)是最初的状态,(1)是经1次搬动后的状态,(2)是经2次搬动 后的状态,等等。分析(0)、(3)、(4)、(7)这几个过程,搬动 3个盘片的过程可分为先将2个盘从座柱A搬到座柱B,然后 将最后1个盘从座柱A搬到座柱C,最后再将2个盘从座柱B 搬到座柱C。当分析搬动4个盘片的过程时,整个过程可分 为先将3个盘从座柱A搬到座柱B,然后将最后1个盘从座柱 A搬到座柱C,最后再将3个盘从座柱B搬到座柱C,以此类 推,移动n(n>1)个盘从座柱A移动到座柱C的过程如下: 步骤①:将(n-1)个盘从座柱A搬动到座柱B,在座柱C的帮 助下
2020年10月2日
4
授课人:杨鹏
3个盘片移动过程演示 4个盘片移动过程演示 5个盘片移动过程演示
高中信息技术必修2:算法与程序设计
2020年10月2日
5
授课人:杨鹏
高中信息技术必修2:算法与程序设计
经过实践可知,根据规则将3个盘从座柱A搬到 座柱C上,最少需要搬动7次,整个移动过程 如下:
2020年10月2日
高中信息技术必修2:算法与程序设计
2020年10月2日
8
授课人:杨鹏
高中信息技术必修2:算法与程序设计
算法Hanoi(n,a,c,b)的含义是:将n个盘从座柱 A(源柱)搬至座柱C(目标柱)在座柱B(帮助柱) 的帮助下完成,算法的含义十分重要,它说 明了过程Hanoi四个参数所表示的含义。这 种直接或者间接地调用自身的算法就是递归 算法。
移动规则是每次只能搬动一个盘,所以搬动(n-1)个盘时, 肯定需要另一个柱子帮助。当n=1时,也就是搬动一个盘, 那只要直接将这个盘从座柱A搬到座柱C就可以了。
2020年10月2日
7
授课人:杨鹏
(1)汉诺塔的算法流程图
第28课 递归算法及程序实现
2020年10月2日
授课人:1 杨鹏
2020年10月2日
高中信息术必修2:算法与程序设计
1.汉诺塔问题。相传古代东方有一座寺 庙,庙内有三根座桩,第一根座桩上 叠有一摞64个中心带孔、直径各不相 同的圆盘片,这些圆盘片叠成塔状, 即越上面的盘片的直径越小。要把这 64个盘片从第一根座桩搬到第三根座 桩上,搬动的规则如下: (1)一次只能从有盘片的座桩上取 走一个盘片; (2)被取走的盘片必须马上放到另 一根座桩上; (3)任何一根座桩上如果有一个以 上盘片,则这些盘片必须呈直径上小 下大的塔状。 需要搬动多少次才能把64个盘片从第 一根座桩搬到第三根座桩上? 2.用 递归算法计算n的阶乘n!。
Else Call hanoi(n - 1, a, b, c) '搬动N-1个盘从座柱A到座柱B,在 座柱C帮助下 num = num + 1 List1.AddItem (Str(num) + " " + a + " -> " + c) Call hanoi(n - 1, b, c, a) '搬动N-1个盘从座柱B到座柱C,在 座柱A帮助下 End If End Sub
递归算法的特点:递归过程一般通过函数或 子过程来实现。
递归算法的实质:是把问题转化为规模缩小
了的同类问题的子问题,然后递归调用函数 (或过程)来表示问题的解。
2020年10月2日
9
授课人:杨鹏
高中信息技术必修2:算法与程序设计
(2)编写程序代码。 'Hanoi过程四个参数分别是盘数,源柱,目标柱,帮助柱, 过程完成功能将N个盘从源柱搬动到目标柱在帮助柱帮助下。 Sub hanoi(n As Integer, a As String, c As String, b As String) If (n = 1) Then '当只有一个盘时 num = num + 1 '计算器增加1 List1.AddItem (Str(num) + " " + a + " -> " + c) '搬动一个盘 从源柱到目标柱
2
授课人:杨鹏
新课引入
高中信息技术必修2:算法与程序设计
相传古代东方有一座寺庙,庙内有三根座桩, 第一根座桩上叠有一摞64个中心带孔、直径各不相 同的圆盘片,这些圆盘片叠成塔状,即越上面的盘 片的直径越小。要把这64个盘片从第一根座桩搬到 第三根座桩上,搬动的规则如下: (1)一次只能从有盘片的座桩上取走一个盘片; (2)被取走的盘片必须马上放到另一根座桩上; (3)任何一根座桩上如果有一个以上盘片,则这些盘 片必须呈直径上小下大的塔状。
2020年10月2日
11
授课人:杨鹏
例:求n的阶乘。
高中信息技术必修2:算法与程序设计
把“从一根座桩上取走一个盘片,放到另一根座桩 上”说成是“搬动一次”。
2020年10月2日
3
授课人:杨鹏
问题提出
高中信息技术必修2:算法与程序设计
需要搬动多少次才能把64个盘片从第一根座桩 搬到第三根座桩上?
先将问题缩小化,尝试2个盘、3个盘、4个 盘、5个盘等的搬动过程。
Hanoi游戏(点击上图运行体验)
2020年10月2日
10
授课人:杨鹏
高中信息技术必修2:算法与程序设计
(3)搬动次数计算 将n个盘片从座柱A搬到座柱C,完成步骤①需要h(n-1)次搬动,完成步骤②只需 要1次搬动,而完成步骤③也需要搬动h(n-1)次。这样,把n个盘片从座柱A搬到 座柱C所需的搬动次数
h(4)=2×h(3)+1=2×(2×h(2)+1)+1=2×(2×(2×h(1)+1)+1)+1=2×(2×(2×1+ 1)+1)+1=24-1=15,2×(2×(2×1+1)+1)+1恰好是二进制数1111转化为十进制的 式子。 汉诺塔问题是一个经典的NP问题,对于计算机来说仍然是一个“难”的问题, “难”主要是说程序执行步数随着N的增长呈指数级增长,如果塔上有64个盘, 则搬动次数是二进制11111…111(64个1)次,换算为十进制数值为264-1= 184467445,目前按每秒可以完成10亿次搬动(大约是230),也需要234秒,大 约是198841天,约544年,即使有这样的速度在有生之年是无法看到所有的搬动 过程。
6
授课人:杨鹏
高中信息技术必修2:算法与程序设计
(0)是最初的状态,(1)是经1次搬动后的状态,(2)是经2次搬动 后的状态,等等。分析(0)、(3)、(4)、(7)这几个过程,搬动 3个盘片的过程可分为先将2个盘从座柱A搬到座柱B,然后 将最后1个盘从座柱A搬到座柱C,最后再将2个盘从座柱B 搬到座柱C。当分析搬动4个盘片的过程时,整个过程可分 为先将3个盘从座柱A搬到座柱B,然后将最后1个盘从座柱 A搬到座柱C,最后再将3个盘从座柱B搬到座柱C,以此类 推,移动n(n>1)个盘从座柱A移动到座柱C的过程如下: 步骤①:将(n-1)个盘从座柱A搬动到座柱B,在座柱C的帮 助下
2020年10月2日
4
授课人:杨鹏
3个盘片移动过程演示 4个盘片移动过程演示 5个盘片移动过程演示
高中信息技术必修2:算法与程序设计
2020年10月2日
5
授课人:杨鹏
高中信息技术必修2:算法与程序设计
经过实践可知,根据规则将3个盘从座柱A搬到 座柱C上,最少需要搬动7次,整个移动过程 如下:
2020年10月2日
高中信息技术必修2:算法与程序设计
2020年10月2日
8
授课人:杨鹏
高中信息技术必修2:算法与程序设计
算法Hanoi(n,a,c,b)的含义是:将n个盘从座柱 A(源柱)搬至座柱C(目标柱)在座柱B(帮助柱) 的帮助下完成,算法的含义十分重要,它说 明了过程Hanoi四个参数所表示的含义。这 种直接或者间接地调用自身的算法就是递归 算法。