受http://xkcd.com/710/启发,这里提供一个代码高尔夫挑战。
挑战
给定一个大于0的正整数,输出它的Hailstone序列。
Hailstone序列
详见Wikipedia。
- 如果数是偶数,则将其除以2。
- 如果数是奇数,则将其乘以3再加1。
重复以上步骤,直到产生的数等于1(如果继续进行下去,它将进入一个无限循环 1 -> 4 -> 2 -> 1...
)。
有时候通过代码来解释可能是最好的方式,以下是来自Wikipedia的一些代码示例:
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
此外,代码高尔夫必须包括完整的用户输入和输出。