美国总统特朗普的侧面和斐波那契数列!
01、斐波那契数列
斐波那契数列(Fibonacci sequence),又称黄金分割数列。
这个神奇奥妙的序列隐藏在我们生活中任何常见的事物,植物如一棵花菜,一朵向日葵,宏观如星系和飓风,小到细胞分裂,都有斐波那契数列的存在。
斐波那契数列是由比萨的斐波那契在1202年创建的。该序列表明下一个数字是前两个数字的总和。
黄金比例和斐波那契数列的数学意义密切相关。斐波那契数列是递归序列,通过以下列顺序加上前面的两个数字产生:0,1,1,2,3,5,8,13,21……
连续两次斐波那契数字,它们的比例非常接近黄金比率,将后面的数字除以前面的数字,约等于1.618(最初几组除外),可以在我们的生活中被应用,包括生物学,建筑学和艺术。
Scratch效果
那么我们如何通过Scratch正确计算出斐波那契数列,绘制出斐波那契弧线和矩形框,并且通过调整参数实现动态演示呢?
02、编程思路
递归还是循环
通过观察斐波那契数列,很容易看出除了第1位、第2位数是固定值以外,其他的数都是与前两位数相关联的。数学公式如下:
F(0)=1,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)
我想到了有递归和循环两种方法可以实现。首先尝试用递归去实现,结果能力不济,折腾了1个小时没有进展,暂且搁置。
好在这个数列结构简单,用循环做起来也还方便,所以我决定先用循环的方法来实现。
程序的架构
本列内容不多,但是麻雀虽小五脏俱全,值得用心考虑程序的架构。
一开始我就犯了新手常见的毛病,所有功能写在一堆,程序乱作一团。这样的好处是程序不用加密,别人也看不明白。新手和高手之间只隔了一层纸,一上手就是搞加密工作的。
玩笑开过了,来看看我刚开始的代码吧,把计算数列、绘图掺和在一起,效果是这样的(此图不用去研究代码的逻辑关系和正确性)。
这样的结果是修改计算数列的代码可能会动到绘图的代码,修改绘图的代码可能会动到计算数列的代码。而且每次阅读都需要看很多不必要的代码,容易造成思维混乱。
怎么办呢?突然想起李泽老师的一节课《动态正弦波图形》。里面提到了绘图和角色操作分离的思想。
于是我把计算斐波那契数列的代码放在一个角色中,绘制斐波那契数列曲线和矩形框的代码放在第二个角色中。这样代码就独立了。如下:
03、计算斐波那契数列
计算斐波那契数列与数列的级数有关,我把级数设置为一个变量。把该变量显示在舞台上,右键设置其为滑杆,再右键设置取值范围从1到20。
计算出来的数列在绘图时需要使用,同时为了方便观察、检验程序,我把数列存在列表中。
为了动态的调整斐波那契数列的级数,需要不停的采集参数“级数”的当前值,所以采用了一个重复执行循环。
计算斐波那契数列的代码如下:
计算结果如下:
小技巧
1自定义积木勾选“运行时不刷新屏幕”。这样的好处是防止大量运算的时候,屏幕会出现闪缩,积木会立即给你展示一个结果,而不会展示这个过程。
如果想看程序运行的步骤,可以不勾选这个选项,比如画圆的时候,你会看见画圆的整个过程。
把数据(参数)显示在舞台上,并且设置为滑杆,可以在程序运行期间动态的控制程序。
不知道看到这,你有没有明白斐波那契数列到底是什么呢?
你也许感兴趣的:
- 【外评】电脑从哪里获取时间?
- 【外评】为什么 Stack Overflow 正在消失?
- Android 全力押注 Rust,Linux 却在原地踏步?谷歌:用 Rust 重写固件太简单了!
- 【外评】哪些开源项目被广泛使用,但仅由少数人维护?
- 【外评】好的重构与不好的重构
- C 语言老将从中作梗,Rust for Linux 项目内讧升级!核心维护者愤然离职:不受尊重、热情被消耗光
- 【外评】代码审查反模式
- 我受够了维护 AI 生成的代码
- 【外评】Linux 桌面市场份额升至 4.45
- 【外评】作为全栈开发人员如何跟上 AI/ML 的发展?
你对本文的反应是: