Ruby 尝试递归问题(我第一次)

Ruby 尝试递归问题(我第一次),ruby,recursion,Ruby,Recursion,我正在尝试使用递归解决一个数字根问题。这似乎是第一次,但不是连续几次。 以下是我希望它做的: digital_root(16) => 1 + 6 => 7 digital_root(942) => 9 + 4 + 2 => 15 ... => 1 + 5 => 6 digital_root(132189) => 1 + 3 + 2 + 1 + 8 + 9 => 24 ... => 2 + 4 => 6 digital_root(4

我正在尝试使用递归解决一个数字根问题。这似乎是第一次,但不是连续几次。 以下是我希望它做的:

digital_root(16)
=> 1 + 6
=> 7

digital_root(942)
=> 9 + 4 + 2
=> 15 ...
=> 1 + 5
=> 6

digital_root(132189)
=> 1 + 3 + 2 + 1 + 8 + 9
=> 24 ...
=> 2 + 4
=> 6

digital_root(493193)
=> 4 + 9 + 3 + 1 + 9 + 3
=> 29 ...
=> 2 + 9
=> 11 ...
=> 1 + 1
=> 2
以下是我得到的:

def digital_root(n)
  arr = n.to_s.split("")
  arr.size > 1 ? arr[0].to_i + digital_root(arr[1..-1].join).to_i : arr.join.to_i
end
让我知道如何让它工作,无论我需要多少层。
提前感谢。

在您的代码中,该函数在一次调用中仅处理1位数字。(
4
用于数字根目录(493193))

让我们在一次调用中处理一层,然后调用下一层(
digital\u root(29)

还有稍微好一点的版本

def digital_root(n)
  n < 10 ? n : digital_root(n.digits.sum)
end
def数字根目录(n)
n<10?n:数字根(n位和)
结束

我认为您可以使用
字符
而不是
拆分
。也许
sum(&:to_i)
可以工作。或者干脆
n个数字。sum
。不需要字符串转换。
数字
颠倒字符顺序,因此打印步骤(根据OP要求)可能需要调整。谢谢大家!这向我展示了我不太了解的新功能。要像你说的那样研究它们,#2比#1更好,所以我建议你从答案中删除#1。你提出的#1和@zippie建议在#2中使用
Integer#数字
(他在评论中收到了你的感谢和认可)这一事实与此无关。我们的目标是提供最佳答案,句号。有时两种方法都同样好,因此呈现这两种方法都有价值。这里不是这样。我建议你也提供链接,因为有些读者可能不熟悉这种方法。
def digital_root(n)
  n < 10 ? n : digital_root(n.digits.sum)
end