def longest_collatz_sequence(n)
longest_sequence = []
(1..n).each do |a|
sequence = [a]
until sequence.last == 1
if a % 2 == 0
sequence.push(a/2)
else
sequence.push(3 * a + 1)
end
end
if sequence.length > longest_sequence.length
longest_sequence = sequence
end
end
longest_sequence
end
longest_collatz_sequence(n)适用于n = 2,但不适用于n> 2.我做错了什么? 谢谢!
答案 0 :(得分:3)
您总是推送相同的号码,a/2
或3*a + 1
,显然,如果a/2 != 1 != 3*a + 1
,它永远不会停止。您可能希望使用最后一个序列而不是a
:
if sequence.last % 2 == 0
sequence.push(sequence.last/2)
else
sequence.push(3 * sequence.last + 1)
end
irb> longest_collatz_sequence(3)
=> [3, 10, 5, 16, 8, 4, 2, 1]
可以使用调试器或在适当的位置引入打印语句来跟踪这些类型的错误,以便您可以跟踪程序中发生的情况。我认为这可能会帮助你在将来帮助自己,因为不是所有的错误都很容易通过视觉检查找到。