美国总统特朗普的侧面和斐波那契数列!

图0:美国总统特朗普的侧面和斐波那契数列!

01、斐波那契数列

 

斐波那契数列(Fibonacci sequence),又称黄金分割数列。

图1:美国总统特朗普的侧面和斐波那契数列!

这个神奇奥妙的序列隐藏在我们生活中任何常见的事物,植物如一棵花菜,一朵向日葵,宏观如星系和飓风,小到细胞分裂,都有斐波那契数列的存在。

图2:美国总统特朗普的侧面和斐波那契数列!

斐波那契数列是由比萨的斐波那契在1202年创建的。该序列表明下一个数字是前两个数字的总和。

图3:美国总统特朗普的侧面和斐波那契数列!

黄金比例和斐波那契数列的数学意义密切相关。斐波那契数列是递归序列,通过以下列顺序加上前面的两个数字产生:0,1,1,2,3,5,8,13,21……

图4:美国总统特朗普的侧面和斐波那契数列!

连续两次斐波那契数字,它们的比例非常接近黄金比率,将后面的数字除以前面的数字,约等于1.618(最初几组除外),可以在我们的生活中被应用,包括生物学,建筑学和艺术。

图5:美国总统特朗普的侧面和斐波那契数列!

Scratch效果

那么我们如何通过Scratch正确计算出斐波那契数列,绘制出斐波那契弧线和矩形框,并且通过调整参数实现动态演示呢?

图6:美国总统特朗普的侧面和斐波那契数列!

02、编程思路

递归还是循环

通过观察斐波那契数列,很容易看出除了第1位、第2位数是固定值以外,其他的数都是与前两位数相关联的。数学公式如下:

F(0)=1,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)

我想到了有递归和循环两种方法可以实现。首先尝试用递归去实现,结果能力不济,折腾了1个小时没有进展,暂且搁置。

好在这个数列结构简单,用循环做起来也还方便,所以我决定先用循环的方法来实现。

程序的架构

本列内容不多,但是麻雀虽小五脏俱全,值得用心考虑程序的架构。

一开始我就犯了新手常见的毛病,所有功能写在一堆,程序乱作一团。这样的好处是程序不用加密,别人也看不明白。新手和高手之间只隔了一层纸,一上手就是搞加密工作的。

玩笑开过了,来看看我刚开始的代码吧,把计算数列、绘图掺和在一起,效果是这样的(此图不用去研究代码的逻辑关系和正确性)。

图7:美国总统特朗普的侧面和斐波那契数列!

图8:美国总统特朗普的侧面和斐波那契数列!

这样的结果是修改计算数列的代码可能会动到绘图的代码,修改绘图的代码可能会动到计算数列的代码。而且每次阅读都需要看很多不必要的代码,容易造成思维混乱。

怎么办呢?突然想起李泽老师的一节课《动态正弦波图形》。里面提到了绘图和角色操作分离的思想。

于是我把计算斐波那契数列的代码放在一个角色中,绘制斐波那契数列曲线和矩形框的代码放在第二个角色中。这样代码就独立了。如下:

图9:美国总统特朗普的侧面和斐波那契数列!

03、计算斐波那契数列

计算斐波那契数列与数列的级数有关,我把级数设置为一个变量。把该变量显示在舞台上,右键设置其为滑杆,再右键设置取值范围从1到20。

计算出来的数列在绘图时需要使用,同时为了方便观察、检验程序,我把数列存在列表中。

为了动态的调整斐波那契数列的级数,需要不停的采集参数“级数”的当前值,所以采用了一个重复执行循环。

计算斐波那契数列的代码如下:

图10:美国总统特朗普的侧面和斐波那契数列!

计算结果如下:

图11:美国总统特朗普的侧面和斐波那契数列!

小技巧

1自定义积木勾选“运行时不刷新屏幕”。这样的好处是防止大量运算的时候,屏幕会出现闪缩,积木会立即给你展示一个结果,而不会展示这个过程。

如果想看程序运行的步骤,可以不勾选这个选项,比如画圆的时候,你会看见画圆的整个过程。

图12:美国总统特朗普的侧面和斐波那契数列!

把数据(参数)显示在舞台上,并且设置为滑杆,可以在程序运行期间动态的控制程序。

图13:美国总统特朗普的侧面和斐波那契数列!

不知道看到这,你有没有明白斐波那契数列到底是什么呢?

你也许感兴趣的:

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注