【发布时间】:2019-07-17 00:33:18
【问题描述】:
我正在尝试对最大的回文乘积problem实现递归解决方案
我想要做的是从 999 开始两个数字,然后将 num1 向下迭代到 100,然后在 999 处重新启动 num1,并将 num2 向下迭代 1。
目标基本上是模仿嵌套的 for 循环。
def largest_palindrome_prod(num1 = 999, num2 = 999, largest_so_far = 0)
prod = num1 * num2
largest_so_far = prod if prod > largest_so_far && check_pal(prod)
if num2 == 100
return largest_so_far
elsif num1 == 100
largest_palindrome_prod(num1 = 999, num2 -= 1, largest_so_far)
else
largest_palindrome_prod(num1 -= 1, num2, largest_so_far)
end
end
#I know this function works, just here for reference
def check_pal(num)
num = num.to_s if num.is_a? Integer
if num.length < 2
true
else
num[0] == num[-1] ? check_pal(num[1..-2]) : false
end
end
rb:10:inlargest_palindrome_prod':堆栈级别太深`
我收到这个错误,它指的是最大回文函数中的 else 语句,但我不知道浪费可能导致堆栈错误。
【问题讨论】:
-
你的递归深度不会达到 900 左右,我认为这足以引发堆栈级别太深的异常。请注意,一旦您发现
num1*num2是回文数,那么在num1递减1和num2不变的情况下调用该方法是没有意义的,因为这不会导致更大的回文数。
标签: ruby recursion stack-overflow palindrome