【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这样变化剧烈的整数。

本文链接:【Scratch数学编程】冰雹猜想

转载声明:本站文章若无特别说明,皆为原创,转载请注明来源:少儿编程网,谢谢!^^


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

坐等沙发
相关文章
编程少年丨余疆海:个性十足却不失温度
编程少年丨余疆海:个性十足却不失温度
为什么大家都建议学习少儿编程要从Scratch开始?
为什么大家都建议学习少儿编程要从Scrat…
孩子学完各个阶段的编程课程能够参加哪些比赛?
孩子学完各个阶段的编程课程能够参加哪…
我的孩子从来没有接触过编程,0基础能不能学?
我的孩子从来没有接触过编程,0基础能不…
【精选作品】如何通过Scratch让小猪跑起来?(内附火影粉丝巨献,必看)
【精选作品】如何通过Scratch让小猪跑起…
0基础的孩子应该怎样学习少儿编程?
0基础的孩子应该怎样学习少儿编程?
Scratch是由麻省理工学院(MIT)设计开发的一款面向少年的简易编程工具,是适合于全世界儿童学习编程和交流的工具和平台