【Scratch数学编程】冰雹猜想

【冰雹猜想】1976年的一天,《华盛顿邮报》于头版头条报道了一条数学新闻。文中记叙了这样一个故事:

70年代中期,美国各所名牌大学校园内,人们都像发疯一般,夜以继日,废寝忘食地玩弄一种数学游戏。这个游戏十分简单:任意写出一个自然数N,并且按照以下的规律进行变换:

如果是个奇数,则下一步变成3N+1。
如果是个偶数,则下一步变成N/2。

不单单是学生,甚至连教师、研究员、教授与学究都纷纷加入。为什么这种游戏的魅力经久不衰?因为人们发现,无论N是怎样一个数字,最终都无法逃脱回到谷底1。准确地说,是无法逃出落入底部的4-2-1循环,永远也逃不出这样的宿命。
【Scratch数学编程】冰雹猜想-少儿编程网
这就是著名的“冰雹猜想”。在西方它常被称为“西拉古斯猜想”,因为据说这个问题首先是在美国的西拉古斯大学被研究的;而在东方,这个问题由将它带到日本的日本数学家角谷静夫的名字命名,被称作“角谷猜想”。今天在数学文献里,大家就简单地把它称作“3x +1问题”。

尽管已经有无数数学家和数学爱好者尝试过对这一猜想进行数学论证,其中不乏天才和世界上第一流的数学家,但他们都没有成功。这个猜想至今无人能证明,也无人能推翻,但是我们可以对它进行验证。

【问题】冰雹猜想:对任意一个正整数n,如果它是奇数,则对它乘3再加1,如果它是偶数,则对它除以2,如此循环,最终都能够得到1。请你试一试,用Scratch编写一个验证冰雹猜想的程序。

【Scratch编程解题】冰雹猜想的变换规则很简单,只有两条:奇数:n = 3 × n + 1 ;偶数:n = n ÷ 2

根据冰雹猜想的规则画出算法流程图:

【Scratch数学编程】冰雹猜想-少儿编程网

接下来,我们使用递归结构来编写程序。首先创建一个名为“冰雹猜想”的模块,参数为n

【Scratch数学编程】冰雹猜想-少儿编程网

新建链表“日志”,对于每次递归调用,我们都把参数n记录到“日志”列表中。

【Scratch数学编程】冰雹猜想-少儿编程网

当 n 等于1时,结束递归程序调用,我们只能 n 大于1的递归调用作处理。

【Scratch数学编程】冰雹猜想-少儿编程网

对于 n 的处理,遵循“冰雹猜想”简单的规则进行。当 n 为偶数时,把 n / 2 作为参数调用模块“冰雹猜想”;当 n 为奇数时,把 3 * n + 1 作为参数调用模块“冰雹猜想”。

【Scratch数学编程】冰雹猜想-少儿编程网

到这里,“冰雹猜想”模块编写完毕,完整代码如下:

【Scratch数学编程】冰雹猜想-少儿编程网

在代码中,我们把每次调用“冰雹猜想”模块的参数n都记录到“日志”列表中,这样我们可以清楚地看到整个“冰雹”变化过程。

最后,我们编写入口程序,用于接收用户输入的任意一个整数,并调用“冰雹猜想”模块进行验证。入口程序的代码如下:

【Scratch数学编程】冰雹猜想-少儿编程网

点击绿旗运行程序,输入一个整数“27”,然后在“日志”中查看整个“冰雹”变化过程。运行结果如下:

【Scratch数学编程】冰雹猜想-少儿编程网

【试一试】冰雹的最大魅力在于不可预知性。
英国剑桥大学教授John Conway找到了一个自然数27。虽然27是一个貌不惊人的自然数,但是如果按照上述方法进行运算,则它的上浮下沉异常剧烈:首先,27要经过77个步骤的变换到达顶峰值9232,然后又经过34步骤到达谷底值1。全部的变换过程(称作“雹程”)需要111步,其顶峰值9232,达到了原有数字27的342倍多,如果以瀑布般的直线下落(2的N次方)来比较,则具有同样雹程的数字N要达到2的111次方。其对比何其惊人!

请你试一试,能否找出像27这样变化剧烈的整数。

*文章为作者独立观点,不代表少儿编程网立场
发表评论

坐等沙发
相关文章
适合孩子学编程的教育游戏APP有哪些?
适合孩子学编程的教育游戏APP有哪些?
为什么大多数学编程的孩子表达能力高于同龄人?
为什么大多数学编程的孩子表达能力高于…
编程少年丨崔少天:幼儿园里学编程的6岁男孩
编程少年丨崔少天:幼儿园里学编程的6岁…
如果孩子系统学完Scratch、Python、NOIP,编程能力可以达到什么水平?
如果孩子系统学完Scratch、Python、NOIP…
编程少年丨夏启航:10岁男孩的“慢”哲学
编程少年丨夏启航:10岁男孩的“慢”哲学
编程少年丨林于森:一个7岁男孩的编程奇缘
编程少年丨林于森:一个7岁男孩的编程奇缘
Scratch是由麻省理工学院(MIT)设计开发的一款面向少年的简易编程工具,是适合于全世界儿童学习编程和交流的工具和平台