Hailstone Sequence问题的学习笔记以及Java语言实现

1,215 阅读1分钟

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