资源简介 (共13张PPT)第四单元 非数值计算4.3探寻“汉诺塔”中的奥秘循环结构:计算机程序周而复始地重复同样的步骤,称为循环。知识点回顾s=1for i in range(1,6):s=s*iprint(s)如果求5!的结果,你可以用循环实现吗?如果求任意数的阶乘呢?while自定义函数——可以复用的代码知识点回顾基本格式def 函数名(参数):语句或语句组return 返回值n可以取任意的值,完成调用。知识点分析分解:5*4!5*4*3!5*4*3*2!5*4*3*2*1!5!可以如何求解呢?得出:5!=5*4!4!=4*3!3!=3*2!2!=2*1!F(n)=1(n=1)n*f(n-1) (n>2)调用本身递归递归算法直接或间接地调用自身的方法称为递归。可以将递归简单类比为具有自相似性重复的事物。递归的基本思想递归的“分”-“治”-“合”把规模较大的问题层层转化为规模较小的同类问题求解。对递归而言,递推与回归,二者缺一不可。1)分:将原有问题分解成K个子问题。2)治:对这K个子问题分别求解。如果子问题的规模仍然不够小,则将其再分解为K个子问题,如此进行下去,直到问题足够小时,就很容易求出子问题的解。3)合:将求出的小规模问题的解合并为一个更大规模问题的解,自下而上逐步求出原问题的解。探寻汉诺塔的奥秘汉诺塔(Tower of Hanoi)源于印度传说中,大梵天创造世界时造了三根金钢石柱子,其中一根柱子自底向上叠着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。1.汉诺塔——1个圆盘探寻汉诺塔的奥秘2.汉诺塔——2个圆盘A→CA→BA→CB→C初始状态 第四步第一步 第五步第二步 第六步第三步 第七步2.汉诺塔——3个圆盘前4步:?A→B→C后3步:?B→A→C如果是n个盘子呢?先把最大圆盘上方的所有圆盘,即n-1个圆盘从起始杆s移动到过渡杆m;接着把最大圆盘,即第n个圆盘移动到目标杆t;再把过渡杆m上的圆盘移动到目标杆t。S m t当n>1时:def hanoi(n, ____,_____,_____):hanoi(n-1, ____,____,____)print(__ , ‘-->’, ____)hanoi(n-1, ___,_____,____)smtif n==1:print(__ , ‘-->’, ____)else:起始杆中间杆目标杆探寻汉诺塔的奥秘先把最大盘子上方的所有盘子,即n-1个盘子从起始杆s移动到过渡杆m;接着把最大盘子,即第n个盘子移动到目标杆t;再把过渡杆m上的盘子移动到目标杆t。当n=1时:s→tstmststmst你能知道圆盘一共移动了多少次吗?想一想什么时候需要计数呢?自主完善汉诺塔次数.py程序想一想什么时候需要计数呢?课堂小结递归:直接或间接地调用自己的方法。递:分解调用有限次数归: 求解返回分治合 展开更多...... 收起↑ 资源预览