Intro
昨天晚上在学习邓俊辉老师的《数据结构》中,老师讲到了一个很著名的数学问题:Hailstone Sequence,至今这个问题没有办法证明其正确性,也无法证明其错误性。
h a i l s t o n e S e q u e n c e ( x ) = { { 1 } , x ≤ 1 ; { x } ∪ h a i l s t o n e S e q u e n c e ( x / 2 ) , x 为 偶 数 ; { x } ∪ h a i l s t o n e S e q u e n c e ( 3 x + 1 ) , x 为 奇 数 . " role="presentation">hailstoneSequence(x)={{1},x≤1;{x}∪hailstoneSequence(x/2),x为偶数;{x}∪hailstoneSequence(3x+1),x为奇数. h a i l s t o n e S e q u e n c e ( x ) = { { 1 } , x ≤ 1 ; { x } ∪ h a i l s t o n e S e q u e n c e ( x / 2 ) , x 为 偶 数 ; { x } ∪ h a i l s t o n e S e q u e n c e ( 3 x + 1 ) , x 为 奇 数 .
Java代码实现
下面我们来用代码来进行实现计算Hailstone Sequence:
/**
* 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));
}
}
输出结果如下:
7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2
The 7's hailstone sequence count is :: 16