递归程序教学.docVIP

  • 7
  • 0
  • 约1.1万字
  • 约 17页
  • 2017-10-03 发布于重庆
  • 举报
递归程序教学

LOGO递归程序教学 一、什么是递归? 递归就是把求未知结果回归成对已知内容进行求解。 数学中经常用自身的简单情况来定义自己。如,阶乘n!=1*2*3*…*n,可定义为: 在LOGO语言中,递归是指一个过程直接或间接地调用该过程本身,这种调用方法叫做“递归调用”,相应的过程叫做“递归过程”。 二、递归图形 有些图形,它本身又包含一个或多个与整个图形相似的图形(只是大小上的差别),这样的图形我们把它称为递归图形。可以用递归过程来绘出图形。 三、递归过程的基本结构 TO 过程名 参数表 IF 递归结束条件 STOP … 过程名 参数表 … END 四、尾递归 尾递归是递归中最简单的一种特殊情况,其基本形式是在过程的最后(END语句之前)调用过程自身,构成循环。 人们很熟悉的“老和尚讲故事”的故事,由于故事的情节里边又讲述了故事的本身,所以这个故事可以无限地反复,永远讲下去。这就是尾递归一个很形象的例子。 什么样的图形,用尾递归来解 例1 画“正大”图形 画出上图最左边的图形,其中最小正方形的边长为5,最大正方形边长不大于100。 [算法分析]该图形由若干个“正大”形图形组成,且相邻两个半径相差一倍。我们可从最小的“正大”形图形开始一个一个画出。因此画“正大”图形过程的结束前可递归调用(尾部)自己,画出下一个“正大”图形,一直到边长大于100。 TO ZHENGDA :R FD :R/2 REPEAT 360[FD :R/2*PI/180 RT 1] BK :R/2 REPEAT 7[FD :R RT 90] END TO DO :X IF :X100 STOP ZHENGDA :X RT 90 DO :X*2 END TO MAIN DRAW DO 5 END 例2 画多个等边长多边形 画出上图最右边的图形。 [算法分析]我们可以先画正三边形,然后画正四边形、…最后画正九边形。由于画正多边形有统一的公式,因此,可以编写一个画n边形的过程,在过程结束前递归调用自己,画n+1边形。 TO DBX :N :A TO MAIN IF :N10 THEN STOP DRAW DBX 3 50 REPEAT :N[FD :A RT 360/:N] END DBX :N+1 :A END 尾递归过程的执行步骤 尾递归总结 尾递归的作用类似于重复命令,直到一个条件成立。 因此,尾递归可看成是一种特殊的重复命令。 五、中间递归 在过程的中部递归调用本过程,称为中间递归(过程)。 什么样的图形,用中间递归来解。 例3 画嵌套三角形 画出如图所示若干个正三角形嵌套在一起的图形,最外三角形的边长为N。 [算法分析] 如下图所示我们先画边长为N的三角形的两边和第三边的一半后,画最外三角形边长为N/2的嵌套三角形(原问题类似的问题),最后画边长为N的三角形的第三边的另一半,并让海龟回到初始位置,方向为原方向。 TO SJX :N IF :N5 STOP REPEAT 2[FD :N RT 120] FD :N/2 RT 60 SJX :N/2 LT 60 FD :N/2 RT 120 END DRAW LT 30 SJX 150 中间递归过程的执行步骤 六、用递归程序画“树形图案” 1、二叉树程序 [说明]图中,树干长为100,每次分叉后,边长都减半,最短不小于5。 [算法分析]这棵二叉树由树干和左子树、右子树组成。左右子树又是与整棵类似的二叉树。画整棵二叉树时,从根开始,先画树干,然后左转45度画左子树,接着右转90度画右子树,最后再左转45度后退回到根。(最后回到根是很重要的) TO TREE :N IF :N5 THEN STOP FD :N LT 45 TREE :N/2 RT 90 TREE :N/2 LT 45  BK :N END TO MAIN DRAW TREE 80 END 递归树程序的各种变形 ① 基本型(角度变小): TO SHU1 :A :N IF :N=0 STOP FD :A LT 30 SHU1 :A*.6 :N-1 RT 60 SHU1 :A*.6 :N-1 LT 30 BK :A END ② 节点处加入小圆,两分支长度不同: TO SHU2 :A :N IF :N=0 STOP FD :A LT 60 REPEAT 36[FD :A*PI/180 RT 10] RT 30 SHU2 :A*.6 :N

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档