Прежде всего, для тех из вас, кто не знает (или забыл) о числах Лихреля, есть запись из Википедии: http://en.wikipedia.org/wiki/Lychrel_number.
Я хочу реализовать детектор числа Лихреля вдиапазон от 0 до 10_000.Вот мое решение:
class Integer
# Return a reversed integer number, e.g.:
#
# 1632.reverse #=> 2361
#
def reverse
self.to_s.reverse.to_i
end
# Check, whether given number
# is the Lychrel number or not.
#
def lychrel?(depth=30)
if depth == 0
return true
elsif self == self.reverse and depth != 30 # [1]
return false
end
# In case both statements are false, try
# recursive "reverse and add" again.
(self + self.reverse).lychrel?(depth-1)
end
end
puts (0..10000).find_all(&:lychrel?)
Проблема с этим кодом - значение глубины [1].Таким образом, в основном, глубина - это значение, которое определяет, сколько раз нам нужно пройти через итерационный процесс, чтобы быть уверенным, что текущее число действительно является числом Лихрелла.Значение по умолчанию составляет 30 итераций, но я хочу добавить больше широты, чтобы программист мог указать свою собственную глубину через параметр метода.30 итераций идеально подходят для такого небольшого диапазона, который мне нужен, но если я хочу охватить все натуральные числа, я должен быть более гибким.
Из-за рекурсии, которая занимает место в Integer # lychrel?Я не могу быть проворным.Если бы я предоставил аргумент для lychrel?
, не было бы никаких изменений из-за оператора [1].
Итак, мой вопрос звучит так: «Как мне реорганизовать мой метод,так он будет правильно принимать параметры? ".