递归计算字符串中字符的数量。(Ruby)

3

我需要编写一个递归函数,只利用两个字符串方法:.empty? 和 .chop。 不,我不能使用.length(你能告诉这是功课吗?)

目前我还在困惑于如何编写函数本身,我传递了字符串,但我不确定如何使用.chop字符串方法递归地遍历字符。我只需使用一个计数器吗?对我来说,语法似乎很棘手。

 def stringLength(string)
  if string.empty?
     return 0
  else
     .....
  end
 end

我希望我能提供更多内容,但目前只能到这个程度。


1
把递归看作是一个函数用不同的参数调用自身,然后看看你能得到什么。你会在哪里再次调用stringLength,并使用什么参数? - antlersoft
任何递归函数需要记住或者你需要知道的两件事情是“终止条件”(你已经知道了)和调用自身(如dbyme的答案所示),通常使用略有不同的参数(如anterlersoft所说)。这是你正常的起点。通常,我会让终止条件也返回最终答案,但这显然取决于函数/上下文。尝试不同的风格,直到找到适合自己的风格,一旦你理解了递归,你会发现它非常自然。Ruby并不特别适合递归,但了解它也是好的。 - ian
1个回答

4

返回 1 + stringLength(string.chop)

这是你缺失的代码行。以下是一个示例,说明它的工作原理:

stringLength("Hello") = 1 + stringLength("Hell")
stringLength("Hell")  = 1 + stringLength("Hel")
stringLength("Hel")   = 1 + stringLength("He")
stringLength("He")    = 1 + stringLength("H")
stringLength("H")     = 1 + stringLength("")
stringLength("")      = 0 

2
等等……对于标记为[作业]的问题,有一个不成文的规定:你不是“给”他们答案,而是“引导”他们找到答案。编辑:实际上,在[作业]标签的定义中确实(在某种程度上)写明了这一点。 - Mark Thomas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接