2012-03-24 66 views
1

我試圖寫一個遞歸函數會得到一些字符串,以及該字符串作爲其參數的lenght,然後打印出原始字符串在字符串中的元音,以及該字符串中元音的相反順序。例如,如果字符串是'Horse',那麼輸出將是'Horse eo'。打印原始字符串以及遞歸

什麼我遇到的麻煩是如何獲得,同時還得到了元音以相反的順序打印的原始字符串。我正在用僞代碼編寫這個函數,我只打印出反轉的元音如下。

MODULE VowelRecursion(String, n) 
    IF n != 0 THEN 
     letter := first letter of String 
     vowel := "" 
     IF letter == vowel THEN 
      vowel := letter 
     ENDIF 
     VowelRecursion(remainder of String, n-1) 
     Print(vowel) 
     ENDIF 
ENDMODULE 

就像我提到的,我的問題是,我無法弄清楚如何讓印刷原始字符串元音發現已經完成後,作爲原始字符串需要先打印,並這樣做是不是必須先返回n變爲0?但問題是,既然我們正在調用其餘串的功能,這將只是一個空字符串,當n == 0,對不對?

由於這是我需要解決學校的問題,我不找任何現成的解決方案,但我想聽到這裏我的思維過程是怎麼了,我可以用它來什麼樣的方法實現需要的東西。

謝謝。

回答

0

在下降到下一個遞歸級別之前,即在撥打VowelRecursion(remainder of String, n-1)之前,您可能會打印letter

Print(letter) 
VowelRecursion(remainder of String, n-1) 
Print(vowel) 
+0

謝謝。通過一些測試,看起來我可以立即開始工作。 – user1290164 2012-03-24 17:05:09

0

您可以在遞歸期間傳遞原始字符串。你不會修改那個字符串,但是當遞歸完成時你只需要使用它。另外,找到它時不能打印元音。您需要將它們存儲在某處,並且只有在完成後纔打印出來。

這意味着你應該添加兩個參數:一個包含原始字符串和(計算)字符串與元音迄今發現(初始爲空)的參數。作爲提示,您可以使用稱爲VowelRecursion("Horse", "Horse", "", 5)的遞歸函數來解決此問題。當n = 0時,您將擁有打印所需結果所需的所有值。

+0

感謝您的回覆。我錯過了在原始文章中提到的問題描述,我們得到的說明函數只允許獲得前面提到的參數字符串和長度。我可以看到如何在參數中攜帶原始字符串會有所幫助。 – user1290164 2012-03-24 17:04:01