资源简介 (共26张PPT)高中信息技术 必修1 数据与计算4.3 非数值计算第二课时 神奇的递归学习目标0102运用合适的算法形成解决问题的方案;了解算法中的分治思想;03体验递归算法,并结合具体问题开展编程实践。4.3 非数值计算——神奇的递归项目内容本节我们将围绕“生活中的算法”项目,尝试用“算法的眼睛”看待生活,用“算法的思维”去解决实际问题。项目任务任务一:巧翻字典任务二:玩转“汉诺塔”游戏本节任务玩“汉诺塔”游戏“汉诺塔”游戏由来:有一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。4.3 非数值计算——神奇的递归4.3 非数值计算——神奇的递归“汉诺塔”游戏规则来:1、有三根相邻的柱子,标号为A,B,C。2、A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘。3、现在把所有盘子一个一个移动到柱子B上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方。ABC玩“汉诺塔”游戏4.3 非数值计算——神奇的递归请打开学案中的“汉诺塔”游戏,赶快体验一下吧!玩“汉诺塔”游戏4.3 非数值计算——神奇的递归分析玩的过程以3个木盘为例ABCA BA C4.3 非数值计算——神奇的递归分析玩的过程以3个木盘为例ABCC BA C4.3 非数值计算——神奇的递归分析玩的过程以3个木盘为例CBAB CB A4.3 非数值计算——神奇的递归分析玩的过程以3个木盘为例ABCA C总结移动规律三步移动将A上面两个木盘从A B将A最下面的一个木盘从A C将B上面两个木盘从B C将A上面一个木盘从A C将B最下面一个木盘从A B将C上面一个木盘从C B将B上面一个木盘从B A将B最下面一个木盘从B C将A上面一个木盘从A C3个木盘的移动问题成功解决了,就可以解决更多木盘的移动问题了。知识探究:递归直接或间接地调用自身的方法称为递归。可以将递归简单类比为具有自相似性重复的事物。递归是计算科学领域中一种重要的计算思维模式。它既是一种抽象表达的手段,也是一种问题求解的重要方法。知识探究:递归函数递归函数是只用函数自身来定义该函数的方法。如斐波那契数列“1,1,2,3,5,8,13……”,可以递归定义为:F(n)=1(n=1或n=2)F(n-1)+F(n-2)(n>2)知识探究:递归的重要组成递推关系是递归的重要组成;边界条件是递归的另一要素(保证递归能在有限次计算后得出结果,而不会产生无限循环地情况)F(n)=1(n=1或n=2)F(n-1)+F(n-2)(n>2)边界条件递推关系知识探究:递归的基本思想递归的基本思想是把规模较大的问题层层转化为规模较小的同类问题求解。对递归而言,递推与回归,二者缺一不可。1)分:将原有问题分解成K个子问题。2)治:对这K个子问题分别求解。如果子问题的规模仍然不够小,则将其再分解为K个子问题,如此进 行下去,直到问题足够小时,就很容易求出子问题的解。3)合:将求出的小规模问题的解合并为一个更大规模问题的解,自下而上逐步求出原问题的解。递归可用“分”,“治”,“合”三个字概括“汉诺塔”游戏程序实现hanoi(盘子数,起始杆,过渡杆,目标杆)hanoi(n,A,B,C)从A移到Chanoi(n-1,B,A,C)hanoi(n-1,A,C,B)前n-1个木盘从A移动到了B前n-1个木盘从B移动到了C汉诺塔递归过程图示“汉诺塔”游戏程序实现上机实践“汉诺塔”游戏程序执行的过程def move(n,s,m,t):if n==1:print(s,'-->',t)move(n-1,s,t,m)print(s,'-->',t)move(n-1,m,s,t) move(3,'a','b','c')move(3,'a','b','c')调用move(2,'a','c','b')print('a','-->','c')move(2,'b','a','c')move(1,'a','b','c')print('a','-->','b')move(1,'c','a','b')move(1,'b','c','a')print('b','-->','c')move(1,'a','b','c')输出:a-->c输出:a-->b输出:c-->b输出:a-->c输出:b-->a输出:b-->c输出:a-->celse:拓展练习计算“汉诺塔”游戏移动的次数。2个金片,移动几次4个金片,移动几次5个金片,移动几次3个金片,移动几次3次15次31次7次……n个金片,移动几次2n-1次拓展练习计算“汉诺塔”游戏移动的次数。def f(n):if n==0:return 0else:return 2*f(n-1)+1x=int(input("请输入塔的个数:"))print("需要移动",f(x),"次")input("运行完毕,请按回车键退出...")方法1拓展练习计算“汉诺塔”游戏移动的次数。方法2c=0c=c+1c=c+1拓展知识迭代程序可以转换成等价的递归程序。以上一节中计算斐波那契数列第N项的值为例,程序间的转换如表所示。迭代与递归算法都需要重复执行某些代码,两者既有区另又有密切的联系。迭代是重复反馈过程的活动,其目的通常是逼迫所需目标或结果。递归是重复调用函数自身。递归满足终止条件的情况时逐层返回。迭代则通常使用计数器结束循环。拓展知识迭代 递归两种算法均需重复执行某些代码一次次重复过程 从而接近或达到目标或结果 重复调用函数自己本身层层化解为规模较小的同类问题三步骤:确定迭代变量 建立迭代关系式 控制迭代过程 递归二要素:递推+回归步骤:确定递推关系式确定边界条件用循环控制迭代进程 遇到边界条件时逐层返回循环次数较大时,迭代效率明显高于递归课堂小结1. 理解递归思想。2. 理解递归算法。3. 结合具体问题开展编程实践。课后作业了解生活中的递归有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?学无止境 永攀高峰感谢观看 展开更多...... 收起↑ 资源预览