麻省理工18年春软件构造课程阅读01“静态检查”

由于我们学校(哈工大)大二软件构造课程的大部分素材取自此,也是推荐的阅读材料之一,于是打算做一些翻译工作,自己学习的同时也能帮到一些懒得看英文的朋友。另外,该课程的阅读资料中有许多练习题,但是没有标准答案,所给出的答案均为译者所写,有错误的地方还请指出。



译者:李秋豪 王一航

审校:李秋豪

V1.0 Thu Mar 1 00:49:04 CST 2018


Reading 1: 静态检查 今天课程的目标:

学习静态类型

了解好的软件应该具有的三个属性


冰雹序列

作为一个运行示例,我们先来了解一下“冰雹序列”,它是这样定义的:从正整数n开始,如果n是偶数,则下一个数是n/2,否则下一个数是3n+1,直到n等于1。这里有几个例子:

2, 1 3, 10, 5, 16, 8, 4, 2, 1 4, 2, 1 2n, 2n-1 , … , 4, 2, 1 5, 16, 8, 4, 2, 1 7, 22, 11, 34, 17, 52, 26, 13, 40, …? (会停止吗?)

由于存在3n+1这种变化,所以序列元素的大小可能会忽高忽低——这也是“冰雹序列”名称的来历,冰雹在落地前会在云层中忽上忽下。那么所有的序列都会最终“落地”变到1吗?(这个猜想称为考拉兹猜想 ,现在还没有一个好的解决方法。)


计算冰雹序列

为了计算冰雹序列里的元素,我们可以在java和python中分别这样写:

// Java int n = 3; while (n != 1) { System.out.println(n); if (n % 2 == 0) { n = n / 2; } else { n = 3 * n + 1; } } System.out.println(n);

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zysgdz.html