相关疑难解决方法(0)

Code Golf:Collat​​z猜想

灵感来自http://xkcd.com/710/这里是一个高尔夫代码.

挑战

给定大于0的正整数,打印出该数字的冰雹序列.

冰雹序列

有关更多详细信息,请参阅Wikipedia

  • 如果数字是偶数,则除以2.
  • 如果数字是奇数,则将其加倍并添加一个.

用生成的数字重复此操作,直到达到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)
Run Code Online (Sandbox Code Playgroud)

这段代码有效,但我正在增加额外的挑战.程序不能容易受到堆栈溢出的影响.所以它必须使用迭代或尾递归.

此外,如果它可以计算大数字并且语言尚未实现,则奖励积分.(或者如果使用固定长度的整数重新实现大数字支持)

测试用例

Number: 21
Results: 21 -> 64 -> 32 -> 16 -> 8 -> 4 -> 2 -> 1

Number: 3
Results: 3 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 …
Run Code Online (Sandbox Code Playgroud)

language-agnostic code-golf collatz rosetta-stone

86
推荐指数
19
解决办法
1万
查看次数