Intro

昨天晚上在学习邓俊辉老师的《数据结构》中,老师讲到了一个很著名的数学问题:Hailstone Sequence,至今这个问题没有办法证明其正确性,也无法证明其错误性。

$$
hailstoneSequence(x)= \Bigg\{ \begin{array} \{\{1\},x\le1;\\ \{x\}\cup hailstoneSequence(x/2)\,,x为偶数;\\ \{x\}\cup hailstoneSequence(3x+1)\,,x为奇数. \end{array}
$$

Java代码实现

下面我们来用代码来进行实现计算Hailstone Sequence:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/**
* Hailstone Sequence问题Java实现
*
* @author <a href="mailto:sunzhenyucn@gmail.com">SunZhenyu</a>
* @version 0.0.1
* @date 2018/3/8
* @since 1.8
*/
public class HailstoneSequence {

private static int hailstone(int num, boolean printer) {
// 用于记录序列中的数的数量
int count = 0;
while(num != 1) {
// 是否需要打印当前数
if (printer) {
System.out.println(num + " ");
}
// 根据公式,任何一个正整数num,如果为偶数则num折半,如果为奇数则num乘以3并加1
num = num % 2 == 0 ? num / 2 : num * 3 + 1;
// 计数器自增
count++;
}
return count;
}

public static void main(String[] args) {
int param = 7;
int count = hailstone(param, true);
System.out.println(String.format("\n The %s's hailstone sequence count is :: %s",param, count));
}
}

输出结果如下:

1
2
7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 
The 7's hailstone sequence count is :: 16