十界蓝桥杯青少年Python中/高级组省赛试题详解——编程题:树形绘制


海龟裂变法:把海龟朝上,克隆一变二,分别左右30°,前进60;同样裂变4次,逐层减6绘制。
程序代码:


单海龟回退法:递归先绘制左子树,回退,然后绘制右子树,回退复位。为了理解回退法,先写一段画一个二叉的程序:


运行结果:

现在复制drawCross函数,函数体内代码不改,只改变名称为drawCross2,然后加到drawCross的“#”处,代码如下:


运行结果:

可见,一个递归画图函数,删除递归调用行后,海龟在函数运行结束后完全复位。本题的回退法递归代码就可以得到了。
程序代码:


回退法由于海龟回退需要时间,所以绘制速度比裂变法慢。回退法逻辑上比裂变法稍微复杂些。



由于层数改为随机数,因此采用倒序计数法,当层数计数为0是结束递归;开始长度也改为随机数,所以递归函数要增加一个长度输入参数length;要倾斜,则左右子树的偏角在同一侧,定为偏向方20°,偏离方10°。
回退法代码:


4 裂变法代码:


思考:如果不小心把回退法的代码搞成下面的样子,请问还能绘制出树丛来吗?如果能,那左边和右边的树丛还有区别吗?




添加 家长论坛微信

全部 0条评论