【发布时间】:2018-12-07 16:41:16
【问题描述】:
我有以下冰雹序列代码,它适用于所有数字,除了 1 的序列:
public class Recursion {
public static void main(String[] args) {
hailstone(16); // prints 16 8 4 2 1
hailstone(1); //prints just 1 instead of 1 4 2 1
}
public static void hailstone(int seed) {
String str = "" + seed;
if (seed == 1) {
System.out.print(str);
} else {
if (seed % 2 == 0) {
System.out.print(str + " ");
hailstone(seed / 2);
} else {
System.out.print(str + " ");
hailstone((3 * seed) + 1);
}
}
}
}
如何在递归方法和无效的情况下绕过这种特殊情况?
我不允许使用任何类型的循环。
【问题讨论】:
-
代码正确。冰雹序列以 1 结束,如果这是第一个元素,则整个序列为 1。
-
有人告诉我,如果种子是 1,那么这是一个特例
-
@NathanHughes from plus.maths.org/content/…: 似乎所有冰雹序列最终都以无限循环结束 [4, 2, 1, 4, 2, 1,...]。如果通过循环实现,这将导致无限循环,如果通过递归实现,则会导致堆栈溢出。因此,在第一个序列 [4, 2, 1] 之后的程序实现中,程序必须停止。
标签: java recursion sequence collatz