2011-11-14 32 views
2

我需要编写一个递归函数,它只使用两个字符串方法,.empty?和.chop。 不,我不能使用.length(你能告诉它的功课了吗?)递归计数字符串中的字符数。 (Ruby)

到目前为止,我一直在写函数本身,我通过它的字符串,但我不确定如何递归去通过使用.chop字符串方法的字符。我会有柜台吗?这个东西的语法对我来说似乎很棘手。

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

我希望我可以放下更多,但这是我坚持。

+1

将递归看作是一个函数,它使用不同的参数调用自己,并查看从那里得到的结果。你会在哪里再次调用stringLength以及使用什么参数? – antlersoft

+5

红宝石的作业?真棒。 – Speed

+0

使用递归函数需要记住或者需要的两件事情是*终止子句*(你已经知道了)以及对自身的调用(正如dbyme的答案所示),通常使用的参数略有不同(正如anterlersoft所说)。这是你的正常起点。通常,我使终止子句也返回最终答案,但它显然取决于函数/上下文。一直玩,直到找到适合你的风格为止,因为一旦你掌握了自己的想法,就会发现自然递归。 Ruby虽然不是特别适合递归,但很好理解。 – iain

回答

4

return 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

等待......对于标记为[家庭作业]的问题,有一条不成文的规则:你不给*他们答案,你*引导他们回答​​问题。 **编辑**:实际上,它在[作业]标签的定义中被写入(有点)。 –