使用递归打印原始字符串以及字符串中的元音

时间:2012-03-24 16:35:43

标签: recursion

我正在尝试编写一个递归函数来获取一些字符串,以及该字符串的长度作为其参数,然后打印出原始字符串,以及该字符串中元音的相反顺序。例如,如果字符串是“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时,这只是一个空字符串,对吗?

由于这是我需要为学校解决的问题,我不是在寻找任何现成的解决方案,但我想知道我的思维过程出错的地方以及我可以用什么方法来实现需要什么。

谢谢。

2 个答案:

答案 0 :(得分:0)

您可以在下降到下一个递归级别之前,即在调用letter之前打印VowelRecursion(remainder of String, n-1)

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

答案 1 :(得分:0)

您可以在递归期间传递原始字符串。您不修改该字符串,但只需在递归完成时使用它。此外,您找不到元音时也无法打印元音。您需要将它们存储在某个地方,并且只有在完成后才能打印出来。

这意味着你应该再添加两个参数:一个包含原始字符串的参数和一个(计算的)字符串,其中包含到目前为止找到的元音(最初为空)。作为提示,您可以使用名为VowelRecursion("Horse", "Horse", "", 5)的递归函数来解决此问题。 n = 0时,您将拥有打印所需结果所需的所有值。