2011-11-14 35 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

等待......對於標記爲[家庭作業]的問題,有一條不成文的規則:你不給*他們答案,你*引導他們回答​​問題。 **編輯**:實際上,它在[作業]標籤的定義中被寫入(有點)。 –