灵感来自 http://xkcd.com/710/这里是它的一个代码高尔夫球。
挑战
给定一个大于0的正整数,打印出该数字的冰雹序列。
冰雹序列
请参阅 维基百科了解更多细节. 。
对生成的数字重复此操作,直到达到1。(如果它在1之后继续,它将进入 1 -> 4 -> 2 -> 1...
的无限循环)
有时代码是最好的解释方式,所以这里有一些来自维基百科
function collatz(n)
show n
if n > 1
if n is odd
call collatz(3n + 1)
else
call collatz(n / 2)
这个代码可以工作,但是我要增加一个额外的挑战。程序不能容易受到堆栈溢出的影响.所以它必须要么使用迭代,要么使用尾递归。
此外,如果它可以计算大数字和语言没有实现它的奖励点。(或者使用固定长度的整数重新实现大数字支持)
测试案例
Number: 21
Results: 21 -> 64 -> 32 -> 16 -> 8 -> 4 -> 2 -> 1
Number: 3
Results: 3 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1
此外,代码高尔夫必须包括完整的用户输入和输出。